这似乎很基本,但我无法弄明白。
我有一个表“item_tags”,我想选择与标签1和2匹配的所有项目(如同每个项目必须有两个标签)。
我如何在mysql中执行此操作?
创建表格是:
CREATE TABLE `item_tags` (
`uid_local` int(11) NOT NULL DEFAULT '0',
`uid_foreign` int(11) NOT NULL DEFAULT '0',
`sorting` int(11) NOT NULL DEFAULT '0',
KEY `uid_local` (`uid_local`),
KEY `uid_foreign` (`uid_foreign`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
谢谢!
答案 0 :(得分:11)
使用:
SELECT i.uid
FROM ITEMS i
JOIN ITEM_TAGS it ON it.uid_local = i.uid
AND it.uid_foreign IN (1, 2)
GROUP BY i.uid
HAVING COUNT(DISTINCT it.uid_foreign) = 2
您需要定义GROUP BY和HAVING子句,并且不同标记ID的计数必须等于您在IN子句中指定的标记数。
答案 1 :(得分:0)
这样的事情?
SELECT i.* from items i inner join items_tags it
on i.id = it.item_id
inner join tags t
on t.id = it.tag_id
WHERE t.name in ('tag1', 'tag2');
修改强>
假设您有项目标签:(item_id,tag_id)为表格