在最大匹配条件

时间:2016-02-09 08:41:29

标签: sql ruby-on-rails sorting

在我的rails webapp中,用户可以应用多个过滤器进行搜索。我希望过滤的项目按大多数匹配条件排序。

Ex:如果用户搜索带有动力转向,电动车窗和中央门锁的汽车。结果项必须按

排序
  1. 所有匹配条件
  2. 匹配的两个条件
  3. 一个条件匹配
  4. 在rails中这样做的标准方法是什么?

    通过编写三个不同的查询来完成上述操作。每一个一个。然后加入他们。随着搜索选项的增加,这似乎效率很低。

    提前谢谢。

2 个答案:

答案 0 :(得分:1)

我认为在这些情况下,最好放弃ActiveRecord并使用直接SQL来获得更好的性能。

您可以使用此查询在单个查询中检索和排序结果:

SELECT * FROM 
   (SELECT
        *,
        (CASE WHEN condition1 THEN 1 ELSE 0) + 
        (CASE WHEN condition2 THEN 1 ELSE 0) +
        (CASE WHEN condition3 THEN 1 ELSE 0) as filterCount
    FROM cars 
    WHERE condition1
    OR condition2
    OR condition3) 
ORDER BY filterCount DESC

答案 1 :(得分:1)

嘿,你可以尝试这些方式使用你可以编写查询。

在查询中使用条件子句来查找给定匹配条件的事件,然后命令给定具有给定计数的记录

ModelName.select("*,((CASE WHEN (condition1) THEN 1 ELSE 0 END) + (CASE WHEN (condition2) THEN 1 ELSE 0 END)+( CASE WHEN (condition3) THEN 1 ELSE 0 END)) as match_occurance").where("condition1 or condition2 or condition3").order("match_occurance desc")