我有一个对象,标签和tag_relationships表。每个对象和标签都有一个id列,tag_relationships连接这两个。
tag_relationships的示例(在下面的示例中使用):
+--------+--------+
| obj_id | tag_id |
+--------+--------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| 2 | 4 |
+--------+--------+
我想实现AND搜索以允许人们过滤标签。只应返回具有所有给定tag_ids的行的obj_ids。例如:
示例输入:1,3 (实际上是标记名称,但它们会转换为ID)
所需的输出:2
感觉这应该很容易,但对于我的生活,我无法想出一个简单的方法来做到这一点。我目前正在考虑返回一个表,其中tag_relationships中的所有行都有一个给定的tag_ids,然后用PHP对它们进行排序。是否有更简单的SQL方法?
答案 0 :(得分:3)
您可以将HAVING
子句与GROUP BY
结合使用来回答涉及所有某些内容的问题......
SELECT
obj_id
FROM
tag_relationships
WHERE
tag_id IN (1,3)
GROUP BY
obj_id
HAVING
COUNT(*) = 2
2
中的COUNT(*)
代表您要搜索的代码数量。如果您想要满意的对象,三个标签......(例如1,3,6
),您可以将COUNT(*)
提升到3
。