1

我正在尝试创建一个报告工具来计算博客网站上与两个定义的分类 ID(3 和 11)都匹配的帖子数量。数据的结构使得每一行都有一个帖子 ID (object_id) 与一个分类 ID (term_taxonomy_id) 配对。帖子与多个分类法配对,因此 object_id 重复,不同的 term_taxonomy_id 在下一列。

这是我正在使用的表的一部分:

+-----------+------------------+
| object_id | term_taxonomy_id |
+-----------+------------------+
|      4070 |               11 |
|      4070 |               19 |
|      4074 |                3 |
|      4074 |               19 |
|      4076 |                3 |
|      4076 |               10 |
|      4076 |               11 |
|      4079 |                4 |
|      4079 |               11 |
|      4079 |               16 |
|      4081 |                3 |
|      4081 |               11 |
|      4081 |               20 |
|      4083 |                3 |
|      4083 |                4 |
|      4083 |               11 |
|      4083 |               16 |
|      4083 |               21 |
+-----------+------------------+

如果工作正常,上述表块的计数应为 3,计数 object_id 4076、4081 和 4083。

我可以使用此查询创建要计数的 object_ids 列表:

SELECT object_id
FROM test_term_relationships
WHERE test_term_relationships.term_taxonomy_id IN (3,11)
GROUP BY object_id
HAVING COUNT(*) > 1

...但我不知道如何计算它们。我从相关问题中尝试过的方法返回匹配 term_taxonomy_id 3 或 11 但不匹配两者的行数(在本例中为 9),或者它们返回三行“2”代替 object_id 到指示匹配的分类 ID 的数量 - 3 和 11。

我的问题:我应该使用什么查询来获得匹配 BOTH term_taxonomy_id 3 和 11 的帖子的正确计数?

提前致谢。

4

1 回答 1

2

只需将查询嵌套在派生表中:

SELECT COUNT(*)
FROM
 ( SELECT object_id
   FROM test_term_relationships
   WHERE test_term_relationships.term_taxonomy_id IN (3,11)
   GROUP BY object_id
   HAVING COUNT(*) > 1
 ) dt
于 2013-09-16T06:40:20.533 回答