【问题标题】:ActiveRecord: Order by ID or column value first and the rest of the query functions the sameActiveRecord:首先按 ID 或列值排序,其余查询功能相同
【发布时间】:2021-10-15 11:41:18
【问题描述】:

我正在尝试将 ActiveRecord 查询写入我需要某些列值位于查询其余部分之前的位置。例如:

如果我在一个表中有 6 条记录,但我希望 2 条具有不同 ID 的记录出现在查询的其余部分之前

这是一个记录集:

[{id: 1},{id: 2},{id: 3},{id: 4},{id: 5},{id: 6}]

我想输出:

[{id: 3},{id: 5},{id: 1},{id: 2},{id: 4},{id: 6}]

注意 3 和 5 在开头。

我将如何在活动记录中写这个?

提前致谢。

【问题讨论】:

  • 您使用什么标准来决定 3 和 5 应该放在开头?

标签: sql ruby-on-rails ruby activerecord psql


【解决方案1】:

不知道您在示例中使用哪些标准对 id 为 3 和 5 的项目进行排序,但假设您在开头添加了一个同样排序的组,您可以执行以下操作:

# let's say 'items' are the ActiveRecord items that you want to order
prepended_ids = [3,5]
items.order("CASE WHEN (id IN (#{prepended_ids.join(',')})) THEN 0 ELSE 1 END ASC, id")

请注意,如果 prepended_ids 为空白,这将不起作用,因此完整的解决方案是:

prepended_ids = [3,5]
items.order("#{"CASE WHEN (id IN (#{prepended_ids.join(',')})) THEN 0 ELSE 1 END ASC" if prepended_ids.present?}, id")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2016-11-03
    • 2023-03-05
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多