gpt4 book ai didi

sql - Rails Active 查询按特定顺序按多个值排序?

转载 作者:行者123 更新时间:2023-12-04 02:44:15 25 4
gpt4 key购买 nike

我有一张 table

Roles(id int,,name vachar(50),role enum(CAD,CA,CM,CV ))

我想选择按特定顺序按特定值排序的数据。
我的事件模型查询:role.order('role asc') 然后结果:
1 name1 CAD
2 name2 CA
3 name2 CM

但我想要这样的结果:
1 name1 CAD
2 name2 CM
3 name2 CA

谁能帮我?
提前致谢

最佳答案

一个可移植的解决方案是使用 CASE 语句作为 ORDER BY 中的内联映射:

query.order(%q(
case role
when 'CAD' then 1
when 'CM' then 2
when 'CA' then 3
end
))
请记住,您可以按您想要的任何表达式 ORDER BY,并且 CASE 当然是 SQL 中的表达式。
较新版本的 Rails 会希望您使用 Arel.sql而不是原始字符串:
query.order(
Arel.sql(
%q(
case role
when 'CAD' then 1
when 'CM' then 2
when 'CA' then 3
end
)
)
)
如果列表是动态的,您可以构建一个 CASE 表达式:
array = %w[CAD CM CA]
q = connection.method(:quote) # Or ApplicationRecord.connection.method(:quote)
cases = array.each_with_index.map { |e, i| "when #{q[e]} then #{i}" }
query.order(Arel.sql("case role #{cases.join(' ')} end"))
所有的字符串操作都有点难看,但它是完全安全的,你通常会将它隐藏在一个范围内。

关于sql - Rails Active 查询按特定顺序按多个值排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19173020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com