我在数据库中有一个标志,该标志可以是一组单词,例如:' 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的情况类似。
答案 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注入......