我遇到的情况是我需要同时将对象与多个标签匹配,以便结果集“缩小”以匹配所有标签。我发现了以下MySQL查询:
SELECT *
FROM OBJECTS o
JOIN OBJECTSTAGS ot ON ot.object_id = o.id
JOIN TAGS t ON t.id = ot.tag_id
WHERE t.name IN ('tag1','tag2')
GROUP BY o.id
HAVING COUNT(DISTINCT t.name) = 2
...其中2是匹配的标签数量。它工作正常。
但是,我需要查询返回对象的计数而不是对象本身。如果我将COUNT(*)
添加到SELECT
,则此查询似乎会混淆不清。我很犹豫只返回id,例如并对它们进行PHP计数,因为它们可以加起来非常大。因此,我希望MySQL返回计数。
有人能建议一个好方法吗?将其分为两个查询是可以接受的。
提前致谢。
答案 0 :(得分:2)
使用:
SELECT COUNT(o.*) AS numObjects
FROM OBJECTS o
WHERE EXISTS (SELECT NULL
FROM OBJECTSTAGS ot
JOIN TAGS t ON t.id = ot.tag_id
AND t.name IN ('tag1','tag2')
WHERE ot.object_id = o.id)