2010-06-25 2 views
6

Это кажется очень простым, но я не могу понять это.Выбор элемента, соответствующего нескольким тегам

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

Спасибо!

+1

Где находятся элементы, а что такое тег 1 и тег 2? –

ответ

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

+0

Спасибо, отлично работал! –

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

EDIT:

suppouse у вас есть items_tags: (ITEM_ID, tag_id) в виде таблицы

+1

Этот aproach будет совпадением OR, а не совпадением AND, поэтому он не отвечает на вопрос. т. Е. Этот запрос найдет элементы, которые соответствуют tag1 или tag2 .., а также потенциально возвращают повторяющиеся элементы. Вопрос хотел найти только те предметы, которые имели как tag1 AND tag2 – timk

Смежные вопросы