【问题标题】:Activerecord ORDER BY FIELD [duplicate]Activerecord ORDER BY FIELD [重复]
【发布时间】:2013-11-11 19:25:27
【问题描述】:

我正在尝试在活动记录中创建"ORDER BY FIELD"。我知道我可以用MySQL 做到这一点,但我试图让我的应用程序不可知并遵循最佳实践。我的生产数据库是PostgreSQL

MySQL 的样子

SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')

【问题讨论】:

  • 问和回答我认为:stackoverflow.com/questions/1309624/…
  • 感谢您的帮助,但我不想在 PG 中模拟 MySQL,但我希望能够使用活动记录来做到这一点。感谢您的帮助

标签: mysql ruby-on-rails database postgresql activerecord


【解决方案1】:

我正在努力实现它,这就是我带来的。我还是觉得这样可以干净一点

Model.select(:id).select(:name).order("status = 'B' DESC, status = 'A' DESC, status = 'D' DESC, status = 'E' DESC, status = 'C' DESC")

【讨论】:

  • 在副本中使用 CASE 语句。
  • @muistooshort 您如何在订单上添加案例声明?
  • the dup 完全一样:order("case status when 'B' ...")。 AR 并不能解决您所有的数据库可移植性需求,甚至不能解决。
  • 我刚刚发布了这个捆绑了这个功能的 gem:github.com/panorama-ed/order_as_specified
【解决方案2】:

一个不可知的选项是将您的状态值移动到另一个模型中,并为排序顺序提供一个额外的属性。

【讨论】:

  • 谢谢我喜欢那个解决方案。如果我不能让它工作,这就是我要做的事情
猜你喜欢
  • 2011-11-18
  • 2012-04-12
  • 1970-01-01
  • 2017-06-18
  • 2014-01-27
  • 2020-08-31
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多