按照一组单词的顺序排序结果

时间:2014-12-29 20:26:17

标签: ruby-on-rails activerecord

我在数据库中有一个标志,该标志可以是一组单词,例如:' a_word',' b_word',' c_word', ' z_word'我希望按照这些字词的自定义顺序对查询结果进行排序,例如:[' z_word',' b_word',' a_word',& #39; c_word&#39]。

我想要(如果存在)类似的东西:

User.order(flag: ['z_word', 'b_word', 'a_word','c_word'])

这是否存在?它与postgres的情况类似。

1 个答案:

答案 0 :(得分:1)

CASE中添加select,从而命名该列,然后在order子句中使用它,如下所示:

case_str = "CASE WHEN users.flag = 'z_word' THEN 0"
case_str += "    WHEN users.flag = 'b_word' THEN 1"
case_str += "    WHEN users.flag = 'a_word' THEN 2"
case_str += "    WHEN users.flag = 'c_word' THEN 3 ELSE 4 END AS sorty_flag"

User.select("*, ?", case_str).order("sorty_flag").to_a

?就在那里以避免SQL注入......