Вопрос с тегами MySQL: как выбрать элемент, помеченный как X, Y и Z?
Я имею дело с базой данных, где элементы «помечены» определенное количество раз.
вещь (100 тыс. Строк)
Я быназваниедругие вещитег (10 тыс. Строк)
Я быназваниеitem2tag (1 000 000 строк)
item_idtag_idподсчитыватьЯ ищу самое быстрое решение для:
Выберите элементы, которые были помечены как X, Y и Z (где X, Y и Z соответствуют (возможно) именам тегов)?
Вот что у меня есть ... Я просто хотел бы убедиться, что я делаю это наилучшим образом:
Сначала получите tag_ids из имен:
SELECT tag.id WHERE name IN ("X","Y","Z");
Затем я группирую по этим tag_ids и использую Фильтровать результат:
SELECT item2tag.*, count(tag_id)
FROM item2tag
WHERE tag_id=1 or tag_id=2 or tag_id=3
GROUP BY item_id
HAVING count(tag_id)=3;
Тогда я могу просто выбрать из пункта с этими идентификаторами.
SELECT * FROM item WHERE id IN ([results from prior query])
У меня есть миллионы строк в item2tag, с индексом (item_id, tag_id). Это будет самое быстрое решение?