Query mit NOT LIKE
kapodde
- datenbank
hi leute,
ich habe eine tabelle mit büchern in einer datenbank und habe dazu eine suchfunktion erstellt, die auch eigentlich ganz schön funktioniert. jetzt möchte ich die suche aber noch insofern erweitern, als das es möglich sein soll wörter explizit auszuschließen.
so möchte ich zum beispiel einen autoren finden können dessen name "ei" enthält, der aber nicht "steiner" heißt.
meine lösung( die allerdings nicht das gewünschte ergebnis liefert) ist folgende query:
SELECT ort,autor_nach,autor_vor,verlag,titel,year,isbn,id FROM Bestand WHERE (autor_vor LIKE '%ei%' OR autor_nach LIKE '%ei%' OR co_autor LIKE '%ei%') AND (NOT (autor_vor LIKE '%steiner%') AND NOT (autor_nach LIKE '%steiner%') AND NOT (co_autor LIKE '%steiner%'))
entgegen meiner erwartung liefert diese anfrage KEIN ergebnis. ersetze ich allerdings dir "AND"'s im negierenden teil durch "OR"'s erhalte ich zwar ein ergebnis allerdings auch die steiners. (das find ich auch logisch)
hat jemand eine ahnung worans liegt, oder kann mir zumindest jemand bestätigen, dass obige query zum ergebnis führen müsste und der fehler irgendwo anders steckt?
yo,
mal von der performance abgesehen, weswegen ein fulltext-index interessant für dich sein könnte, hast du die bedinungen falsch miteinander verbunden.
SELECT ort,autor_nach,autor_vor,verlag,titel,year,isbn,id
FROM Bestand
WHERE (autor_vor LIKE '%ei%' OR autor_nach LIKE '%ei%' OR co_autor LIKE '%ei%')
AND (autor_vor NOT LIKE '%steiner%' OR autor_nach NOT LIKE '%steiner%' OR co_autor NOT LIKE '%steiner%')
Ilja
Hello,
WHERE (autor_vor LIKE '%ei%' OR autor_nach LIKE '%ei%' OR co_autor LIKE '%ei%')
AND (autor_vor NOT LIKE '%steiner%' OR autor_nach NOT LIKE '%steiner%' OR co_autor NOT LIKE '%steiner%')
vielleicht kann ich gerade nicht klar denken, aber darüber kann man streiten oder? Dein Query findet einen Treffer, sobald einer der Autoren nicht steiner ist. Das war nicht gefragt. Es war gefragt:
gib mir alle, wo in einem der Autoren ei vorkommt, aber keiner der Autoren steiner heißt.
MfG
Rouven
über ne volltextsuche hab ich auch schon nachgedacht. kann man diese bei bedarf auch manuell sortieren? also automatisch werden die ergebnisse ja nach relevanz sortiert, ich möcht aber gerne die möglichkeit haben das ergebnis nachträglich nach z.b. titel zu sortieren.
kann ich an eine MATCH AGAINST query einfach ein ORDER BY ranhängen und so die automatische sortierung "überschreiben"?
die syntax NOT (autor LIKE $dings) und autor NOT LIKE $dings sind meines wissens nach übrigens das gleiche. probiert hab ichs jedenfalls mit beiden und es gab das gleiche (nicht)-ergebnis