2016-05-13 11 views
0

Ich habe eine Abfrage verwendet, die die Benutzereingabe von einem Suchfeld überprüft und die relevanten Daten zurück erhält. Diese Abfrage verwendet mehrere Likes zum Überprüfen verschiedener Felder (Name, Referenz, Auftrags-ID usw.).Wo wie abhängig von Benutzer-ID

Ich bemerkte, dass die Abfrage ignoriert, wo es überprüft Benutzer ID Datensätze nur von diesem Benutzer zu erstellen. Und bringt stattdessen Datensätze von allen Benutzern zurück. Dies ist die aktuelle Abfrage:

SELECT ORDER_ID, ORDER_DATE, ORDER_TIME, ORDER_REF, ORDER_RECNAME 
FROM ORDERS 
WHERE USER_ID = '$userID' AND ORDER_ID LIKE '%$SearchData%' 
    OR ORDER_RECNAME LIKE '%$SearchData%' OR ORDER_REF LIKE '%$SearchData%' 
    OR ORDER_POSTCODE LIKE '%$SearchData%' 
GROUP BY ORDER_ID, ORDER_DATE, ORDER_TIME, ORDER_REF, ORDER_RECNAME 

Ist da irgendwo ich einfach falsch? Es verwendet den Likes korrekt, aber nicht den WHERE USER_ID Teil.

+2

Versuchen Sie dies: SELECT ORDER_ID, ORDER_DATE, ORDER_TIME, ORDER_REF, ORDER_RECNAME FROM ORDERS WHERE BENUTZER_ID = '$ userID' AND (ORDER_ID LIKE '% $ search%' OR ORDER_RECNAME LIKE '% $ search%' OR ORDER_REF LIKE '% $ SearchData%' ODER ORDER_POSTCODE LIKE '% $ SearchData%') GROUP NACH ORDER_ID, ORDER_DATE, ORDER_TIME, ORDER_REF, ORDER_RECNAME –

+0

@FlorinSecal Danke! Arbeiten perfekt jetzt :) – Jake

Antwort

0

Sie mischen and und or-Operatoren in den Where-Kriterien ohne Klammern und dies verursacht das Problem. Verkapseln Sie die like-Operatoren, die durch or verbunden sind, um die Einschränkung user_id auf alle anzuwenden. Denken Sie daran, and Operator hat höhere Priorität als or!

USER_ID = '$userID' AND (ORDER_ID LIKE '%$SearchData%' 
OR ORDER_RECNAME LIKE '%$SearchData%' OR ORDER_REF LIKE '%$SearchData%' 
OR ORDER_POSTCODE LIKE '%$SearchData%') 
+0

Danke für den Rat, funktioniert jetzt perfekt. – Jake