我在我的网站上有这3张相似/相关产品的表格
idproduto | produto
idtag |标签
id | idproduto | IDTAG
这是mysql查询
SELECT produtos.idproduto, COUNT(*) AS matchedTags
FROM produtos
INNER JOIN produtos_tags_id
ON (produtos_tags_id.idproduto = produtos.idproduto)
INNER JOIN produtos_tags
ON (produtos_tags.idtag = produtos_tags_id.idtag)
WHERE produtos_tags_id.idtag IN(
SELECT produtos_tags_id.idtag
FROM produtos_tags_id
WHERE produtos_tags_id.idproduto = '1')
AND produtos.idproduto != '1'
GROUP BY produtos_tags_id.idproduto
HAVING COUNT(*) > 0
此查询工作正常,选择产品并匹配具有相同标签的其他产品。 我想要的是这个查询使产品之间的关系只产生2个或更多匹配的标签,我尝试不同的东西,但没有成功。
需要一些帮助
答案 0 :(得分:1)
所以你想要有两个或更多匹配标签的产品?获取ID:
select pt1.idproduto, pt2.idproduto, count(*) as NumInCommon
from produtos_tags pt1 join
products_tags pt2
on pt1.idtag = pt2.idtag and pt1.idproduto < pt2.idproduto
group by pt1.idproduto, pt2.idproduto
having count(*) >= 2;
如果您想要与特定产品配对,只需添加相应的where
子句:pt2.idproduto = 1
。