MySQL-Tag-Frage: Wie wähle ich ein Element aus, das als X, Y und Z markiert wurde?
Ich habe es mit einer Datenbank zu tun, in der Elemente eine bestimmte Anzahl von Malen "markiert" werden.
Artike (100k Zeilen)
Ich würdNamandere SacheEtiket (10k Zeilen)
Ich würdNamitem2tag (1.000.000 Zeilen)
Artikel Identifikationsnumme tag_idAnzahIch suche die schnellste Lösung für:
Wählen Sie Elemente aus, die mit X, Y und Z markiert wurden (wobei X, Y und Z (möglicherweise) Markierungsnamen entsprechen)?
Hier ist, was ich bisher habe ... Ich möchte nur sicherstellen, dass ich es bestmöglich mache:
Zunächst die tag_ids aus den Namen abrufen:
SELECT tag.id WHERE name IN ("X","Y","Z");
Dann gruppiere ich nach diesen tag_ids und benutze Having, um das Ergebnis zu filtern:
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;
Dann kann ich einfach einen Artikel mit diesen IDs auswählen.
SELECT * FROM item WHERE id IN ([results from prior query])
Ich habe Millionen von Zeilen in item2tag mit einem Index für (item_id, tag_id). Wird dies die schnellste Lösung sein?