开发者

Selecting an item matching multiple tags

开发者 https://www.devze.com 2023-01-04 23:10 出处:网络
This seems very basic but I can\'t figure it out. I\'ve got a table \"item_tags\", and I want to select all of the items that match tags 1 and 2 (as in, each item has to have both tags).

This seems very basic but I can't figure it out.

I've got a table "item_tags", and I want to select all of the items that match tags 1 and 2 (as in, each item has to have both tags).

How would I do this 开发者_开发问答in mysql?

Create table is:

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;

Thanks!


Use:

  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

You need to have a GROUP BY and HAVING clause defined, and the count of distinct tag ids must equal the number of tags you specify in the IN clause.


something like this?

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');

EDIT:

suppouse you have items_tags: (item_id, tag_id) as table

0

精彩评论

暂无评论...
验证码 换一张
取 消