这似乎很基本,但我无法弄清楚。
我有一个表“ 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;
谢谢!
使用:
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子句中指定的标签数。