【发布时间】:2015-10-06 06:05:04
【问题描述】:
我正在为我的网页制作标签系统,并且有三个表格:
- 项目 - ID 和其他一些
- 标签 - ID 和名称
- item_tags - 带有 IDitem 和 IDtag 的联结表
选择带有给定主题标签的所有项目非常简单:
SELECT items.* FROM items
join item_tags on items.ID=item_tags.IDitem
join tags on item_tags.IDtag=tags.ID
where tags.name="something";
问题是,如果我想选择所有带有多个标签的项目,例如找到所有标记为猫和动物的项目,该怎么办?
我考虑过制作临时表,插入所有带有第一个标签的项目,然后留下带有第二个标签的项目,然后是第三个,然后是第四个等等,但看起来不太好也不太快。
【问题讨论】:
-
where tags.name in ('apple', 'banana', 'stealth bomber') -
@MarcB 关闭,但不完全是 - 它选择了所有苹果、所有香蕉和所有隐形轰炸机,但我想要同时是苹果、香蕉和隐形轰炸机的东西。
-
知道了,那么你需要
count(*) as found_tags和having found_tags = 3 -
@MarcB found_tags 得到很大的值(看起来它计算了所有标签或其他东西)。德鲁皮尔斯的回答也计算了行数,所以我猜你的意思是这样的。
标签: php mysql hashtag junction-table