2017-07-27 6 views
0

Ich habe die folgende Tabellenstruktur:MySQL von Tag aus verschiedener Tabelle auswählen

Bilder
id | ...

keyword_relations
id | Schlüsselwort-ID | image_id

keywords
id | Stichwort

Wie wähle ich, wenn jemand nach etwas wie 'Haus' sucht. Und wie kann ich bei der Suche nach mehreren Keywords wie "rotes Haus" (Stichwort "rot" und Stichwort "Haus") nur Bilder mit allen Keywords anzeigen?

Die Abfragen, die ich habe, funktioniert nicht perfekt und einige von ihnen sind ziemlich langsam.

Ist dies sogar in einer Abfrage möglich oder wäre es besser, sie zu teilen?

+0

Unter der Annahme, dass die Anzahl der Schlüsselwörter variieren kann, ist eine Möglichkeit, String-Verkettung zu verwenden, um das SQL zu erstellen. Wenn Sie das nicht gemeint haben, geben Sie bitte genauere Beispieldaten an. Ist die Reihenfolge wichtig oder können die Schlüsselwörter in beliebiger Reihenfolge angezeigt werden? – GurV

+0

Zeigen Sie, was Sie bisher versucht haben, damit wir davon arbeiten können. –

+0

Ich habe nur mit verschiedenen Ansätzen herumgespielt, aber keiner von ihnen scheint eine gute Lösung zu sein. Ich dachte, weil dies eine ziemlich häufige Tabellenstruktur für Informationen wie diese ist, muss es eine Art von Best Practice geben, die mir nicht bewusst ist ... –

Antwort

0

Wie hier gefragt, was ich bisher (vereinfacht) habe. Zuerst habe ich von Keywords die Ide nach Stichwort (Suchbegriff explodierte):
"SELECT id FROM keywords WHERE keyword IN($keywords)"

davon, dass ich eine Liste von IDs zu erzeugen, die für die Hauptabfrage verwendet wird:
"SELECT i.* FROM images i JOIN keyword_relations k ON k.image_id = i.id WHERE k.keyword_id IN($kids) GROUP BY i.id HAVING COUNT(k.keyword_id) = $keywordcount"

Die COUNT auch verwendet werden können, Um nach Relevanz zu sortieren, war die Relevanz die Anzahl der übereinstimmenden Keywords.

Verwandte Themen