繁体   English   中英

Rails 3查询界面-高级订购

[英]Rails 3 Query Interface - Advanced Ordering

在将我们所有的Rails ActiveRecord发现迁移到新的查询接口时,我遇到了一个问题。 大多数都是简单的,但是这是更复杂的。

我们遇到了一个问题,我们想从数据库中列出某些项目,但要以特定的顺序返回结果,而不仅仅是降序,升序。 对此的旧解决方案就是这样。

ids = [2,19,1,11,22]
Project.find(:all, :conditions => {:id => ids}, :order => "FIELD(id,#{ids.join(',')})")

顺序应该是正确的,请尝试使用它引发的新查询界面进行尝试。

Project.where(:id => ids).order("FIELD(id,#{ids.join(',')})")

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC,1018 DESC,1017) DESC LIMIT 1' at line 1: SELECT  `projects`.* FROM `projects` WHERE (`projects`.`id` IN (1018, 1017)) ORDER BY FIELD(id DESC,1018 DESC,1017) DESC LIMIT 1

因此,“ order”采用字符串,并假定其始终是字段名称或字段名称列表。

有人知道这种方法吗? 非常感谢。

罗伯

该死的,确保您有一个纯粹由整数组成的数组(SQL插入;),然后下面的方法应该起作用。

join_ids = ids.join(',')
Project.find_by_sql ["SELECT * FROM projects WHERE id IN [?] ORDER BY FIELD(id,?);",join_ids,join_ids]

你明白了。 虽然不漂亮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM