我有一个包含以下表格的 MySQL 数据库:
items | id, item
items_tags | id, item_name, item_id, tag_name, tag_id
tags | id, tag
我想允许用户搜索带有任何标签或任何标签组合的项目。这里有一些示例数据来显示我想要做什么:
items:
id | item
-----------
1 | banana
2 | orange
3 | tomato
items_tags:
id | item_name | item_id | tag_name | tag_id
---------------------------------------------
1 | banana | 1 | yellow | 1
2 | banana | 1 | fruit | 2
3 | orange | 2 | orange | 3
4 | orange | 2 | fruit | 2
5 | tomato | 3 | red | 4
6 | tomato | 3 | vegetable| 5
tags:
id | tag
--------------
1 | yellow
2 | fruit
3 | orange
4 | red
5 | vegetable
我可以运行什么查询来只返回带有“黄色”和“水果”标签的项目(即,应该返回项目的第 1行)?
谢谢!
更新:
这是有效的答案:
SELECT *
FROM items
WHERE id IN (
SELECT item_id
FROM items_tags
WHERE tag_name IN ('yellow', 'fruit')
GROUP BY item_id
HAVING COUNT(*) = 2
)
感谢 chetan 的帮助!