Abfrage mit mehreren Tags

8

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.

    
Ode 06.01.2012, 18:05
quelle

4 Antworten

8

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.

    
kba 06.01.2012, 18:28
quelle
1
%Vor%

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.

    
RolandoMySQLDBA 06.01.2012 18:52
quelle
1

@ 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:

%Vor%     
jcoffland 10.05.2015 01:24
quelle
0

Versuchen Sie diese Abfrage:

%Vor%     
Somnath Muluk 06.01.2012 18:52
quelle

Tags und Links