0

我有一个对象、标签和 tag_relationships 表。对象和标签各有一个 id 列,tag_relationships 将两者连接起来。

tag_relationships 示例(在下面的示例中使用):

+--------+--------+
| obj_id | tag_id |
+--------+--------+
| 1      | 1      |
| 1      | 2      |
| 2      | 1      |
| 2      | 3      |
| 2      | 4      |
+--------+--------+

我想实现 AND 搜索以允许人们过滤标签。只应返回包含所有给定 tag_id 的行的 obj_id。例如:

示例输入:1、3(实际上是标签名称,但它们会转换为 id)

所需输出:2

感觉这应该很容易,但对于我的生活,我想不出一个简单的方法来做到这一点。我目前正在考虑返回一个表,其中包含 tag_relationships 中具有给定 tag_id 之一的所有行,然后使用 PHP 对它们进行排序。有没有更简单的仅限 SQL 的方法?

4

1 回答 1

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.

于 2012-06-22T01:55:03.183 回答