SRa*_*ack 6 sql postgresql ruby-on-rails
我有一个priority = ['HIGH', 'MEDIUM', 'LOW']用于设置'紧急'数据库列的数组.我想检索按优先级排序的数据,尽管应用Task.order(:urgency)按字母顺序返回结果(即HIGH,LOW,MEDIUM).
我正在使用PostgreSQL作为数据库.
我(显然)喜欢这些从高优先级返回到低优先级.有没有一种简单的方法来实现它,也许使用值在数组中的位置?
MrY*_*iji 12
一个简单的CASE WHEN可以做的技巧(这里使用的postgreSQL语法):
scope :urgency_ordered {
order(<<-SQL)
CASE tasks.urgency
WHEN 'HIGH' THEN 'a'
WHEN 'MEDIUM' THEN 'b'
WHEN 'LOW' THEN 'c'
ELSE 'z'
END ASC,
id ASC
SQL
}
Run Code Online (Sandbox Code Playgroud)
这样称呼它:
Task.urgency_ordered
Run Code Online (Sandbox Code Playgroud)
SQL的输出很好CASE WHEN:
scope :urgency_ordered {
order(<<-SQL)
CASE tasks.urgency
WHEN 'HIGH' THEN 'a'
WHEN 'MEDIUM' THEN 'b'
WHEN 'LOW' THEN 'c'
ELSE 'z'
END ASC,
id ASC
SQL
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3426 次 |
| 最近记录: |