Hallo zusammen,
ich baue eine Datenbank in der ich Informationen zu Fotos speichern will. Die DB besteht aus drei Tabellen:
Nun möchte ich die Datenbank natürlich nach verschiedenen Kriterien durchsuchen können. Die ODER-Abfrage steht schon, Kopfzerbrechen bereitet mir aber noch die UND-Abfrage. Mein Entwurf dafür sieht wie folgt aus, allerdings werden dabei eben nur die Schlagwörter (und nicht zusätzlich fotoinfo.titel bzw. fotoinfo.beschreibung berücksichtigt) und mir stellt sich außerdem die Frage, wie performant diese IN-Lösung bei einer großen Datenbank ist?
Wie könnte ich diese Abfrage sinnvoll um die anderen Felder erweitern?
Danke und Gruß
Martin
ich baue eine Datenbank in der ich Informationen zu Fotos speichern will. Die DB besteht aus drei Tabellen:
- fotoinfo: enthält Infos zum Foto, also Titel, Beschreibung, die Nummer des Fotos im Archiv etc. Schlüssel ist fotoid.
- keywords: enthält die Liste der Schlagwörter, die den Fotos zugewiesen werden können (kw_id, keyword)
- foto2kw: verknüpft die beiden Tabellen über die Schlüssel fotoid und kw_id
Nun möchte ich die Datenbank natürlich nach verschiedenen Kriterien durchsuchen können. Die ODER-Abfrage steht schon, Kopfzerbrechen bereitet mir aber noch die UND-Abfrage. Mein Entwurf dafür sieht wie folgt aus, allerdings werden dabei eben nur die Schlagwörter (und nicht zusätzlich fotoinfo.titel bzw. fotoinfo.beschreibung berücksichtigt) und mir stellt sich außerdem die Frage, wie performant diese IN-Lösung bei einer großen Datenbank ist?
Code:
SELECT f2k.fotoid, fi.archivid, fi.titel, fi.beschreibung FROM foto2kw f2k LEFT JOIN fotoinfo fi ON f2k.fotoid = fi.fotoid WHERE f2k.kw_id = (SELECT kw_id FROM keywords WHERE keyword LIKE ('%fliegenpilz%')) AND f2k.fotoid IN ( SELECT fotoid FROM foto2kw WHERE kw_id = (SELECT kw_id FROM keywords WHERE keyword LIKE ('%wiese%')) )
Danke und Gruß
Martin
Comment