mysql - SQL获取与另一个产品具有更多共同属性的产品

标签 mysql database

我有如下三个表:

产品

id   |   name
1    |   name1
2    |   name2
3    |   name3

属性

id   |    name    
1    |      attr1
2    |      attr2
3    |      attr3
4    |      attr4
5    |      attr5
6    |      attr6
7    |      attr7

attr_rel 建立产品和属性之间的关系

attr_id   |  prod_id
   1      |      1
   1      |      2
   2      |      1
   2      |      2
   3      |      3
   4      |      2
   4      |      3
   5      |      1
   5      |      2
   5      |      3

我想要的是执行一个查询,返回所有产品,这些产品按照它们与给定产品共有的属性数量排序。

示例:对于产品 3 查询应该返回类似的内容

id    |    name     |    num_attr_in_common
2     |  product2   |             2
1     |  product1   |             1

(因为产品 3 与产品 2 共享属性 4 和 5 但仅与产品 1 共享属性 5)

有人可以帮我吗?

最佳答案

select a1.prod_id,p.name,count(*) as num_attr_in_common
from attr_rel as a1
inner join (
select attr_id
from attr_rel
where prod_id = 3) as a2
on a1.attr_id = a2.attr_id and a1.prod_id <> 3
inner join products as p on p.id = a1.prod_id
group by a1.prod_id
order by num_attr_in_common desc

关于mysql - SQL获取与另一个产品具有更多共同属性的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7302441/

相关文章:

Mysql High UPDATE SELECT 导致滞后

mysql - 如何使用sequelize获取对象数据?

mysql - 使用命令行执行 MySQL 存储过程

php - 在循环、 sleep 循环或单独请求中查询数据库

java - NetBeans IDE 中的组合框不会填充从 MySQL 中提取的年份

MySQL - 搜索小数点后 3 位的条目

mysql - 按频率顺序选择最常出现的值

php - 可更新的投票+解释数据库

java - 使用java将数据从数据库设置到Extjs网格

sql - 如何根据表单值连接到指定的数据库表