Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL基于筛选器查找相关产品_Sql - Fatal编程技术网

SQL基于筛选器查找相关产品

SQL基于筛选器查找相关产品,sql,Sql,对于本例,假设我的数据库中有三个表 产品 名称 身份证件 过滤器 身份证件 名称 产品过滤器 身份证件 产品标识 过滤器id 我想根据访问者正在查看的当前产品的过滤器向他们推荐产品 product_filters表可能包含以下数据 id | product_id | filter_id ====================================== 1 | 1 | 1 2 | 1

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

产品

名称 身份证件 过滤器

身份证件 名称 产品过滤器

身份证件 产品标识 过滤器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个数量的产品:

最平等 最多相等最少数量的过滤器 最接近的产品-id 上述情况下的顺序为

3,2,5,4
我总是需要x数量的结果

我现在拥有的

计数过滤器的数量,限制为x个结果

计数相等筛选器的数量


我怎样才能组合这些查询,即使没有匹配项,我也总能得到x个结果?

我不知道如何通过打开产品1获得统计表中列出的结果。您可以使用更多定义的变量值吗,比如EID prod id filter id 1 a n 2 b o 3 c p。4 d q 5 e r 6 f s 7 g t 8 h u 9我无法使列eo对齐properly@LynneDavidson我在图表中添加了与产品1相同的筛选器id。您好,您想查看哪个结果没有匹配项?看到你从上面问了吗?所有项目?!
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;