从多个表中获取数据并按时间排序

时间:2009-11-17 13:57:30

标签: ruby-on-rails database sorting

我正在创建一个我想要创建历史记录页面的页面。所以我想知道是否有任何方法可以从多个表中获取所有行,然后按时间排序?每个表都有一个名为“created_at”的字段。

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

3 个答案:

答案 0 :(得分:1)

你可能会得到更好的答案,但我认为你需要

  1. 创建一个History表,其中包含Created日期列,自动生成的Id列以及您要公开的任何其他内容[例如Name,{{1 }}]
  2. 修改生成“历史记录”项目的所有表格,以通过Description
  3. 上的外键关系使用此新表格

    “混搭”表[即将不同的结果集合并到一个结果集]是一个非常困难的问题,但无论如何你都会有效地做到 - 只是在应用程序层,所以为什么不正确地做以及更多在数据层有效。

    希望这会有所帮助:)

答案 1 :(得分:0)

取决于这些数据库是否全部在同一台计算机上:

在同一台机器上:在sql中使用OrderBy和UNION语句返回结果集

在不同的计算机上:您需要测试它的性能,但您可以使用Linked Servers和UNION,ORDER BY。或者,您可以让ruby从每个db获取结果,然后将它们组合并排序

编辑:从你上次关于不同表而不是数据库的评论;使用这样的东西:

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

答案 2 :(得分:0)

你需要执行sql:

通过created_at incr

从表格顺序中选择*

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

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