Abfrage mit variablen Kriterien
Eda
- php
Hallo allerseits
Ich habe da eine Frage.
Ich habe eine Datenbank gebastelt, die zu Bildern Stichworte speichert: In der einen Tabelle die Bilder (ca. 1000) und in der anderen die Stichworte zu den entsprechenden Bild-IDs.
Nun möchte alle jene Bilder anzeigen, die eine bestimmte Kombination von Stichworten hat. Wobei dies sich je nach Abfrage ändern kann.
Bisher habe ich das so gelöst:
$krit = "( ( ( pppstwfff ) AND nnnstwfff) OR pppstwfff )";
ppp .. BildID IN (SELECT BildID FROM Stichworte WHERE stichwort = '
nnn .. BildID NOT IN (SELECT BildID FROM Stichworte WHERE stichwort = '
fff .. ' )
(mit str_replace)
mysql_query("SELECT BildID FROM Bilder WHERE $krit")
Und eigentlich funktioniert das auch.
Bloss sobald es das $krit länger wird, hängt sich das System auf: Internal Server Error.
Und wenn ein ODER drin ist hängt es sich noch viel früher auf.
Könnte es sein, dass ich hier eine sinnlos ressourcenverschlingende Methode verwende?
Ich habe mir überlegt, ob ich nicht die ganze Tabelle in einen Array pappen kann und dann dort entsprechend von php suchen lasse. Da ist mir aber nicht klar, wie ich eine so variable Bedingung implementieren könnte. exec wäre wohl eine Möglichkeit, aber da lasse ich meist die Finger davon. Und ich bin mir nicht mal sicher, ob das von der Performance unbedingt besser wäre.
Kann mir einer nen Tip geben, ob ich auf den Holzweg bin?
Vielen Dank schon mal, Eda
Hello,
Ich habe da eine Frage.
Ich habe eine Datenbank gebastelt, die zu Bildern Stichworte speichert: In der einen Tabelle die Bilder (ca. 1000) und in der anderen die Stichworte zu den entsprechenden Bild-IDs.
Nun möchte alle jene Bilder anzeigen, die eine bestimmte Kombination von Stichworten hat. Wobei dies sich je nach Abfrage ändern kann.
Bisher habe ich das so gelöst:
$krit = "( ( ( pppstwfff ) AND nnnstwfff) OR pppstwfff )";
Wenn die Kriterien Strings sind, müssen sie quotiert werden.
Außerdem müssen die Strings vorher escaped werden.
Und dann muss auch der gesamte Vergleich jeweils durchgeführt werden.
Die Ergebnisse der Vergleiche kannst Du dann verunden oder verodern.
Das Ganze wird als left Join ausgeführt oder explizit mit einem "where" zwischen den Tabellen, was schlussendlich aber auch einen left Join darstellt.
Schau Dir bitte die Artikel
Kontextwechsel http://aktuell.de.selfhtml.org/artikel/php/kontextwechsel/bisher.htm und
Einführung in Joins http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/ an.
Die sollten Dir weiterhelfen.
Mit PHP hat Deine Aufgabenstellung aber nur am Rande etwas zu tun, wenn Du die Queries mittesls PHP zusammenstellst.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg