SQL根据过滤器

时间:2015-10-19 22:16:54

标签: sql

对于这个例子,假设我的数据库中有三个表。

产品

  • 名称
  • ID

过滤器

  • ID
  • 名称

product_filters

  • ID
  • PRODUCT_ID
  • 过滤器_id

我想根据他们正在查看的当前产品的过滤器向访问者推荐产品。

product_filters表可能包含以下数据

 id    |   product_id    |   filter_id
 ======================================
 1     |    1            |    1
 2     |    1            |    2
 3     |    1            |    3
 4     |    2            |    1
 5     |    3            |    1
 6     |    3            |    2
 7     |    5            |    1
 8     |    5            |    8
 9     |    5            |    7

在这种情况下,当用户打开产品1时,会发生以下统计信息'

product          equals       filters
------------------------------------------
product 2        1  (1)         1 
product 3        2  (1,2)       2
product 4        0              0
product 5        1  (1)         3

为了给用户提供最佳的相关结果,我想按以下顺序返回最匹配的x数量的产品:

  1. 最相等
  2. 最低等数量的过滤器
  3. 最近的产品 - id
  4. 上述情况中的顺序是。

    3,2,5,4
    

    我总是需要一定数量的结果。

    我现在有什么。

    计算过滤器数量,限制为x结果。

    SELECT product_id, count(product_id) 
    FROM product_filters 
    GROUP BY product_id LIMIT 5;
    

    计算相等过滤器的数量

    SELECT product_id, count(product_id) 
    FROM product_filters  
    WHERE filter_id = 1 
    OR filter_id = 2 
    OR filter_id = 3  
    GROUP BY product_id;
    

    我怎么能以一种总是得到x结果的方式组合这些查询(即使没有匹配)?

0 个答案:

没有答案