mysql - serchkick 找到正确结果后如何重新排序结果?

标签 mysql ruby-on-rails activerecord searchkick

当我在 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/

相关文章:

mysql - View 中的 FROM 子句错误

php - 计算行数,并且仅当准备好的 PDO 行数超过 0 时才执行 while 循环

ruby-on-rails - 用 cucumber / capybara 测试 ActiveMerchant

ruby-on-rails - activerecord-2.3.14 与 ruby​​ 1.9.2::undefined 方法 `reject' 中断 "4":String

mysql - 从多个值计算最大的单个间隙

php - 用户消息系统(PHP/MySQL)

ruby-on-rails - Rails 4.0.0 jQuery Mobile 按钮图标未在生产中显示

ruby-on-rails - 包括有关在Elasticsearch on Rails(Gem Tire)上搜索的其他表格

ruby-on-rails-3 - 如何在Rails 3中使用 'after_initialize'?

ruby-on-rails - Rails 限定工资期