Выбор элемента, соответствующего нескольким тегам - PullRequest
6 голосов
/ 25 июня 2010

Это кажется очень простым, но я не могу понять это.

У меня есть таблица "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;

Спасибо!

Ответы [ 2 ]

11 голосов
/ 25 июня 2010

Использование:

  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, а количество идентификаторов различных тегов должно совпадать с количеством тегов, указанных в предложении IN.

0 голосов
/ 25 июня 2010

как то так?

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:

предположим, что у вас есть items_tags: (item_id, tag_id) в виде таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...