首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在最大匹配条件下对筛选的项进行排序。

问在最大匹配条件下对筛选的项进行排序。
EN

Stack Overflow用户
提问于 2016-02-09 08:41:28
回答 2查看 52关注 0票数 0

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

例:如果用户搜索一辆带有动力转向、动力窗和中心锁的汽车。生成的项必须按照

  1. 所有匹配条件
  2. 两个条件匹配
  3. 单条件匹配

在rails中这样做的标准方法是什么?

我正在通过编写三个不同的查询来完成上述工作。每人一张。那就加入他们。随着搜索选项的增加,这似乎效率很低。

提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2016-02-09 09:05:29

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

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-02-09 09:31:23

嘿,你可以试试这些方法,用你可以写的查询。

在查询中使用条件子句查找给定的匹配条件,然后用给定的计数排序给定的记录。

代码语言:javascript
复制
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")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35287359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档