Vinzenz Mai: AND oder OR oder IN, das ist die Frage

Beitrag lesen

Hallo Thomas,

  

> SELECT knn_information.information AS information  
>     FROM knn_information  
> JOIN knn_tagged  
>     ON knn_tagged.information = knn_information.id  
> JOIN knn_tags  
>     ON knn_tags.id = knn_tagged.tag  
> WHERE knn_tags.tag = '$keyword'  

Solange nur ein Tag mit der Information verknüpft ist, klappt alles wunderbar. Wenn ich nun aber mehrere Tags habe klappt das ganze nicht mehr.

Was heißt: "Klappt nicht mehr"?

Beispiel:
WHERE knn_tags.tag = '$keyword1' AND knn_tags.tag = '$keyword2'

a) Wenn $keyword1 ungleich $keyword2 ist, dann _muss_ die Ergebnismenge leer
   sein. Wahrscheinlich möchtest Du den OR-Operator verwenden, noch schöner
   wäre die Verwendung von IN:

WHERE knn_tags.tag IN ('$keyword1', '$keyword2')

b) zu PHP:
   Falls Deine Keywords aus Benutzereingaben stammen, so solltest Du diese mit
   mysql_real_escape_string() behandeln, um SQL-Injection zu vermeiden.
   (adäquate Mechanismen bei mysqli oder PDO böten sich auch an :-))

Freundliche Grüße

Vinzenz