2009-11-17 48 views
0

我正在创建一个页面,我想创建一个历史页面。所以我想知道是否有办法从多个表中获取所有行,然后按照他们的时间排序?每个表都有一个名为“created_at”的字段。从多个表中提取数据并按时间排序

那么有没有什么办法从所有表中获取并排序,而不需要Rails将它们排序为我?

+0

你是指多个数据库或多个表内的单个数据库? – 2009-11-17 13:59:38

+0

对不起,数据库不是数据库 – ThoKra 2009-11-17 14:02:32

回答

1

你可能会得到一个更好的答案,但我会想你需要

  1. Created日期栏,自动生成的Id列,以及任何其他内容创建一个History表,你想揭露[例如NameDescription]
  2. 修改产生了“历史”项中的所有表消耗上通过外键关系这个新表History.Id

“混搭”表格[即将不同的结果集合并成一个结果集合]是一个非常困难的问题,但是无论如何,您将会有效地进行上述操作 - 仅仅在应用程序层中,为什么不正确并且更高效地进行操作在数据层。

希望这有助于:)

+0

希望不必这样使用它;)但是,这种方式我认为是最简单和最快的。 – ThoKra 2009-11-17 14:09:28

+0

当你可以使用UNION时,你为什么要经历制作新表的所有努力? – 2009-11-17 14:15:55

0

根据这些数据库是否都在同一台机器或不上:

在同一台机器上:使用排序依据和UNION语句在SQL返回结果集

在不同的机器:你会想要测试它的性能,但可以使用链接服务器和UNION,ORDER BY。或者,你可以让红宝石​​从每个分贝获得结果,然后将它们组合并分类

编辑:从你最后一个评论关于不同的表格,而不是DB的;使用这样的事情:

SELECT Created FROM table1 
UNION 
SELECT Created FROM table2 
ORDER BY created 
0

你会需要像执行SQL:从表顺序由created_at增量

选择*:存储到一个数组这一点。对每个数据源执行此操作,然后对Ruby中的所有数组执行合并排序。当然,这对于小数据集很适用,但是一旦你得到一个很大的数据集(即:大于将适合内存的数据集),那么你将不得不使用不同的收集/合并算法。

所以我想答案是你确实需要执行某种Ruby,除非你使用另一个答案中描述的联合方法。