Pergunta de codificação do MySQL: como selecionar um item que foi marcado como X, Y e Z?
Estou lidando com um banco de dados onde os itens são "marcados" um certo número de vezes.
item (100 mil linhas)
Eu irianomeoutras coisasetiqueta, rótulo, palavra-chave (10 mil linhas)
Eu irianomeitem2tag (1.000.000 de linhas)
item_idtag_idcontagemEstou procurando a solução mais rápida para:
Selecione os itens que foram marcados como X, Y e Z (onde X, Y e Z correspondem a nomes de marcas (possivelmente))?
Aqui está o que eu tenho até agora ... Gostaria apenas de ter certeza de que estou fazendo da melhor maneira possível:
Primeiro obtenha os tag_ids dos nomes:
SELECT tag.id WHERE name IN ("X","Y","Z");
Então eu agrupo por esses tag_ids e uso Ter para filtrar o resultado:
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;
Então eu posso apenas selecionar um item com esses IDs.
SELECT * FROM item WHERE id IN ([results from prior query])
Eu tenho milhões de linhas no item2tag, com um índice em (item_id, tag_id). Essa será a solução mais rápida?