【问题标题】:Sort the filtered items on maximum matching conditions根据最大匹配条件对过滤后的项目进行排序
【发布时间】:2016-05-19 03:52:19
【问题描述】:

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

例如:如果用户搜索配备动力转向、电动车窗和中控锁的汽车。结果项目必须排序为

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

在 Rails 中执行此操作的标准方法是什么?

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

提前谢谢你。

【问题讨论】:

  • “乏味”这个词并不合适:您只编写一次代码,并且需要尝试正确地完成它。每次有人进行查询时,您都不会编写代码。 “效率低下”,也许——这将是需要关注的问题。
  • 对。谢谢你.. @MaxWilliams

标签: sql ruby-on-rails sorting


【解决方案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

【讨论】:

    【解决方案2】:

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

    在查询中使用条件子句查找给定匹配条件的出现然后以给定计数对给定记录进行排序

    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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2023-02-16
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多