Ruby on rails 从多个表中获取数据,并按时间对所有表进行排序

Ruby on rails 从多个表中获取数据,并按时间对所有表进行排序,ruby-on-rails,database,sorting,Ruby On Rails,Database,Sorting,我正在创建一个页面,我想在其中创建一个历史页面。所以我想知道是否有办法从多个表中获取所有行,然后按时间排序?每个表都有一个名为“created_at”的字段 那么,有没有办法从所有表中提取数据并进行排序,而不让Rails从我这里对它们进行排序?这取决于这些数据库是否都在同一台机器上: 在同一台计算机上:在sql中使用OrderBy和UNION语句返回结果集 在不同的机器上:您需要测试它的性能,但您可以使用链接服务器和UNION,按顺序。或者,您可以让ruby从每个db中获取结果,然后将它们组合起

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


那么,有没有办法从所有表中提取数据并进行排序,而不让Rails从我这里对它们进行排序?

这取决于这些数据库是否都在同一台机器上:

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

在不同的机器上:您需要测试它的性能,但您可以使用链接服务器和UNION,按顺序。或者,您可以让ruby从每个db中获取结果,然后将它们组合起来进行排序

编辑:根据您上次对不同表格的评论,而不是DB的评论;使用类似以下内容:

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

您需要执行以下sql语句:

按增量创建的表格顺序选择*

:将其存储到数组中。对每个数据源执行此操作,然后对Ruby中的所有数组执行合并排序。当然,这对小数据集很有效,但一旦您得到一个大的数据集(即:大于将装入内存),则必须使用不同的收集/合并算法


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

你可能会得到一个更好的答案,但我认为你需要这样做

  • 创建一个
    History
    表,其中包含
    Created
    日期列、自动生成的
    Id
    列以及任何其他要公开的内容[例如
    Name
    Description
    ]
  • history.Id
  • “混搭”表[即将不同的结果集合并为单个结果集]是一个非常困难的问题,但无论如何,您都可以有效地执行上述操作-仅在应用程序层执行,因此为什么不在数据层正确且更有效地执行此操作呢


    希望这有帮助:)

    您是说一个数据库中有多个数据库还是多个表?对不起,我是说“数据表,非数据库”希望不必这样使用它;)但我认为这样做是最简单、最快的。当你可以使用UNION时,你为什么还要花那么多精力去制作新的表格呢?