【问题标题】:How to reorder results after serchkick finds a proper result?serchkick 找到正确结果后如何重新排序结果?
【发布时间】:2017-10-26 07:52:20
【问题描述】:

当我在 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 ruby-on-rails activerecord searchkick


    【解决方案1】:

    这是一个原始的 MySQL 查询,它将生成您期望的输出:

    SELECT *
    FROM posts
    WHERE
        id IN (3, 1, 2)
    ORDER BY
        FIELD(id, 3, 1, 2)
    LIMIT 11
    

    我对 ActiveRecord 知之甚少,但我希望您需要将原始 SQL 用于上述 ORDER BY 子句,并可能用于整个查询。这里的一种选择是运行整个原始查询:

    sql = "SELECT * FROM posts ... ORDER BY FIELD(id, 3, 1, 2) LIMIT 11"
    records_array = ActiveRecord::Base.connection.execute(sql)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多