考虑这三个表:
新闻(列:ID等)
News_Tag_Cross(列:ID、NewsID、TagID)
标签(列:ID、名称)
如何获取具有两个标签的所有新闻文章:“经销商”和“客户”?
我可以对两个标签运行此查询并对结果进行 UNION,但会返回 Dealer 标签或 Client 标签的行。显然,我想返回连接到两者的新闻项目。
SELECT n.id FROM news
INNER JOIN news_tag_cross ntc
ON ntc.newsid=n.id
INNER JOIN tags t
ON t.id=ntc.tagid
WHERE news_tag_cross.tagID = 'DealerID'
我必须注意,这是我当前查询的粗略翻译 - 我真的不想泄露表名等,或者用额外的列和数据让任何人感到困惑。
最佳答案
您可以将聚合与 having
子句一起使用:
SELECT n.id
FROM news INNER JOIN
news_tag_cross ntc
ON ntc.newsid = n.id INNER JOIN
tags t
ON t.id = ntc.tagid
GROUP BY n.id
HAVING SUM(t.name = 'Dealer') > 0 AND
SUM(t.name = 'Client') > 0;
还有其他方法可以表达这一点(特别是使用连接)。我喜欢这种方法,因为 having
子句对于包含或排除的条件非常灵活。
关于mysql - 选择新闻,加入多个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108918/