MySQL:返回与所有标记匹配的对象计数

时间:2011-05-06 21:02:27

标签: mysql sql aggregate-functions

我遇到的情况是我需要同时将对象与多个标签匹配,以便结果集“缩小”以匹配所有标签。我发现了以下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返回计数。

有人能建议一个好方法吗?将其分为两个查询是可以接受的。

提前致谢。

1 个答案:

答案 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)