Servus.
Ich bin dabei eine Arte MultiTag-Suche zu realisieren. Das bedeutet, dass ich über ein Formular verschiedene Tags schreiben oder auswählen kann, mit denen ich dann eine gezielte Suche nach Beiträgen, Bildern, oder Projekten, eben den Dingen suchen kann, die mit den Tags versehen wurden.
Die sehr vereinfachte Struktur der Tabelle ist im Folgendem zu sehen:
Mit folgender Abfrage erhalte ich je Zeile den Projektnamen mit einem Tag:
Ich möchte nun eine relative und eine absolute Suche realisieren, das heißt:
1) Bei der Suche nach 'Alfa Tag, Bravo Tag' sollen alle Projekte angezeigt werden, die einen der gesuchten Tags enthalten.
2) Bei der Suche nach 'Alfa Tag, Bravo Tag' sollen nur die Projekte angezeigt werden, die alle gesuchten Tags enthalten.
Zu 1) Das ist nicht so schwer da ich das mit eine WHERE OR Abfrage machen kann:
Bei 2) habe ich vermutlich einen Denkfehler, jedoch verstehe ich nciht wieso
Achtung: Fehlerhafter Code
Wenn doch mein Ergebnis durch die Abfrage (ohne die Bedingung [WHERE] ) die Ergebnisse in den Zeilen liefern die ich benötige für eine Abfrage mit AND... Ach Mensch, ich glaub ich weiß warum das nciht funktioniert... Das AND bezieht sich nur auf das was pro Zeile angezeigt wird, iwie auch logisch. Aber dann weiß ich nicht wie ich das so filtern kann dass ich nur noch die Projekte angezeigt bekomme, die alle Tags enthalten, die ich in der Suche, im Formular, angegeben habe..
Kann mir wer weiterhelfen?
Ich bin dabei eine Arte MultiTag-Suche zu realisieren. Das bedeutet, dass ich über ein Formular verschiedene Tags schreiben oder auswählen kann, mit denen ich dann eine gezielte Suche nach Beiträgen, Bildern, oder Projekten, eben den Dingen suchen kann, die mit den Tags versehen wurden.
Die sehr vereinfachte Struktur der Tabelle ist im Folgendem zu sehen:
Code:
+--------------------------+ +------------------+ +-----------------+ |projects | |tags | |join | | | | | | | |project_id|title | |tag_id|title | |project_id|tag_id| +----------+---------------+ +------+-----------+ +---------+-------+ |1 |Alfa Project | |1 |Alfa Tag | |1 |1 | |2 |Bravo Project | |2 |Bravo Tag | |1 |2 | |3 |Charlie Project| |3 |Charlie Tag| |2 |1 | |4 |Delta Project | |4 |Delta Tag | |3 |1 | |5 |Echo Project | |5 |Echo Tag | |3 |2 | |6 |Foxtrot Project| |6 |Foxtrot Tag| |3 |4 | |... |... | |... |... | |... |... | +----------+---------------+ +------+-----------+ +---------+-------+
Code:
SELECT projects.title AS project, tags.title AS tag FROM projects INNER JOIN join USING ( project_id ) INNER JOIN tags USING ( tag_id) +-------------------------+ |Ausgabe | | | |project |tag | +---------------+---------+ |Alfa Project |Alfa Tag | |Alfa Project |Bravo Tag| |Bravo Project |Alfa Tag | |Charlie Project|Alfa Tag | |Charlie Project|Bravo Tag| |Charlie Project|Delta Tag| |... |... | +---------------+---------+
1) Bei der Suche nach 'Alfa Tag, Bravo Tag' sollen alle Projekte angezeigt werden, die einen der gesuchten Tags enthalten.
2) Bei der Suche nach 'Alfa Tag, Bravo Tag' sollen nur die Projekte angezeigt werden, die alle gesuchten Tags enthalten.
Code:
+-------------------------+ +-------------------------+ |Ausgabe zu 1) | |Ausgabe zu 2) | | | | | |project |tag | |project |tag | +---------------+---------+ +---------------+---------+ |Alfa Project |Alfa Tag | |Alfa Project |Alfa Tag | |Alfa Project |Bravo Tag| |Alfa Project |Bravo Tag| |Bravo Project |Alfa Tag | |Charlie Project|Alfa Tag | |Charlie Project|Alfa Tag | |Charlie Project|Bravo Tag| |Charlie Project|Bravo Tag| +---------------+---------+ +---------------+---------+
Code:
SELECT projects.title AS project, tags.title FROM projects INNER JOIN join USING ( project_id ) INNER JOIN tags USING ( tag_id) WHERE tags.title = 'Alfa Tag' OR tags.title = 'Bravo Tag'
Achtung: Fehlerhafter Code
Code:
SELECT projects.title AS project, tags.title FROM projects INNER JOIN join USING ( project_id ) INNER JOIN tags USING ( tag_id) WHERE tags.title = 'Alfa Tag' AND tags.title = 'Bravo Tag'
Kann mir wer weiterhelfen?
Comment