Ich arbeite an einer tagbasierten Suche. Ich habe drei Tabellen Tag (ID, Name), TagXmedia (ID, Tag_ID, Media_ID) und Medien (ID, ...). tagXmedia ist die Mapping-Tabelle zwischen den Tag- und Media-Tabellen. Dies ist eine Eins-zu-Viele-Beziehung.
Ich könnte wirklich eine kleine Anleitung dazu verwenden, wie man eine UND-Art der Suche erstellt. Zum Beispiel muss ich in der Lage sein, nach einem Eintrag in der Medientabelle zu suchen, die mit den Tags "home" und "hawaii" verknüpft ist.
Ich habe mit MySQL experimentiert wie
%Vor%Jede Hilfe hier wäre wirklich willkommen.
Folgendes sollte funktionieren.
%Vor% Wenn Sie mehr als nur zwei Tags haben möchten, können Sie sie einfach hinzufügen. Denken Sie daran, die 2 in der HAVING
-Klausel zu ändern.
Ich habe angenommen, dass alle Zeilen in tagXmedia
eindeutig sind. Falls dies nicht der Fall ist, müssen Sie DISTINCT
zum COUNT
-Teil hinzufügen.
Stellen Sie sicher, dass Sie diesen Index in tagXmedia haben:
%Vor%Hier ist ein Testfall:
%Vor%Hier ist das Ergebnis:
%Vor%Beachten Sie, dass tag_id 2 und 4 sich in media_id 2 und 5 befinden. Deshalb funktioniert die Abfrage.
@ kba's Antwort ist korrekt, aber Sie können dies auch mit einem JOIN machen, der wahrscheinlich effizienter ist.
%Vor% Ich hatte ein ähnliches Problem, bei dem ich nicht nur das media_id
, sondern das eigentliche Objekt erhalten wollte und willkürlich durch Kommas getrennte Listen von Tags übergeben wollte. Hier ist meine vollständige Lösung mit einer gespeicherten Prozedur:
Tags und Links mysql