2010-10-08 4 views
1

Supposons que j'utilise 2 AND et un OR pour récupérer un résultat, premier test avec une valeur de saisie de texte sur name, je pourrais obtenir un résultat correct, mais quand je change $getc à une valeur autre que chaîne vide, la le résultat ne change pas, il interroge uniquement la valeur name. Qu'est-ce qui ne va pas?ET, OU sortie mauvais résultat

$query1 = "SELECT * FROM $tableName WHERE name LIKE '%$asd%' OR descriptions LIKE 
    '%$asd%' AND category='$getc' AND company_type='$dsp' LIMIT $start, $limit"; 

Répondre

8

Essayez de mettre () autour name LIKE '%$asd%' OR descriptions LIKE '%$asd%' comme:

$query1 = "SELECT * FROM $tableName WHERE (name LIKE '%$asd%' OR descriptions LIKE '%$asd%') AND category='$getc' AND company_type='$dsp' LIMIT $start, $limit"; 

qui dit category et company_typedoit Match et au moins un de name et descriptions doivent correspondre.

Raison:

a OR b AND c AND d 

est traitée comme suit comme AND est d'avoir plus precedence que OR

a OR (b AND c AND d) 

mais ce que vous voulez est:

(a OR b) AND c AND d 
+0

Il est étrange que je reste N'obtenez aucun résultat après avoir mis un crochet avant de poster cette question. – proyb3

+0

Ok, j'arrive à bien utiliser use! Empty() pour valider chaque paramètre et les ajouter dans mysql statement s'il y a une valeur. – proyb3

+0

Ouais, merci, mais je n'avais pas de compte. J'ai expérimenté en mysql, un peu trop de code fait que mon cerveau se détraque. – proyb3

Questions connexes