作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我在 Rails 控制台中这样做时:posts = Post.active.search('lorem').records
它给了我这个:Post Load (0.9ms) SELECT `posts` .* FROM `posts` WHERE `posts`.`id` IN (3, 1, 2) LIMIT 11
但是当我执行 posts.pluck(:id)
时,结果是: [1、2、3]
。所以,如您所见,顺序不一样,因为它在查询中,它应该是 [3, 1, 2]
。如何重新排序结果,使其成为 [3, 1, 2]
?谢谢。
最佳答案
这是一个原始的 MySQL 查询,它将生成您期望的输出:
SELECT *
FROM posts
WHERE
id IN (3, 1, 2)
ORDER BY
FIELD(id, 3, 1, 2)
LIMIT 11
我对 ActiveRecord 知之甚少,但我希望您需要对上述 ORDER BY
子句使用原始 SQL,并且可能对整个查询使用原始 SQL。这里的一个选择是运行整个原始查询:
sql = "SELECT * FROM posts ... ORDER BY FIELD(id, 3, 1, 2) LIMIT 11"
records_array = ActiveRecord::Base.connection.execute(sql)
关于mysql - serchkick 找到正确结果后如何重新排序结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46948664/
当我在 Rails 控制台中这样做时:posts = Post.active.search('lorem').records 它给了我这个:Post Load (0.9ms) SELECT `post
我是一名优秀的程序员,十分优秀!