Beiträge mit tag1 UND tag2 finden? (über eine Join-Tabelle) Exists / Having / subqueries… What to use?
ch muss eine Abfrage durchführen, um nach mehreren Begriffen zu suchen und zu filter
Ich habe einen Tisch mit Waffen und alle können mehrere Tags haben.Ich möchte in der Lage sein, eine Filteroption für den Benutzer zu erstellen, die nur Waffen mit z. 'tag1' UND 'tag2'.
Bis jetzt
Ich habe sie mit einem @ gefilteGROUP_CONCAT
mitHAVING
bis jetzt hat das aber leistungsprobleme! Da bin ich gezwungen ein @ zu machGROUP BY w.id
Aber ich will machenORDER BY
etwas anderes. Und GROUP BY spielt nicht gut mit ORDER BY ....
Ich habe versucht, etwas mit EXISTS (SELECT…) zu erstellen, um nach mehreren Werten filtern zu können. Ich bin mir jedoch nicht sicher, ob ich dies tun soll, wenn sich in der Mitte eine „Join-Tabelle“ befindet. (Also mit 2 linken Joins)
weapons:
id | name
----------
1 | sword
2 | shield
weapon_tag_links:
tag_id | weapon_id
-------------------
62 | 1
80 | 1
80 | 2
60 | 2
weapon_tags:
tag_id | tag
--------------
60 | red
62 | blue
80 | old
Suchanfrage
SELECT DISTINCT * FROM weapons as w
LEFT JOIN weapon_tag_links AS l ON l.weapon_id = w.id
INNER JOIN weapon_tags AS t ON l.tag_id = t.tag_id
WHERE EXISTS (
****** Something to go here *******
WHERE t.tag = ‘blue’
) AND EXISTS (
****** Something to go here *******
WHERE t.tag = ‘old’
)
Mir fehlt nur der Link, den Sie in @ benötigeEXISTS
. Aber ich bin mir nicht sicher, wie ich das hinzufügen soll ...
Die Frage
Sag Ich möchte nach einem Eintrag in Waffen suchen, der @ iblue
UNDold
, (in diesem Fall ein Schwert) Wie mache ich das?
Ich sage nicht, dass ich "EXISTS" verwenden MUSS, aber ich möchte, dass die Suche nach Beiträgen mit bestimmten Tags, die durch @ verbunden sind, optimal funktionierAND
!