2014-07-09 1 views
-2

C'est ma requête (Mysql)Pourquoi cette requête (Mysql) ne fonctionne pas?

$query_Search = 'SELECT ID, Titre , Categorie, Description, Province , Com_Territ, Type_Annonce, Prix, Devise, Date, State 
           FROM articles 
           WHERE Titre LIKE \'%' . safe($_POST['q']) . '%\' OR Categorie LIKE \'%' . safe($_POST['q']) . '%\' 
           ORDER BY CASE WHEN Titre LIKE \'' . safe($_POST['q']) . '%\' THEN 0 
           WHEN Titre LIKE \'%' . safe($_POST['q']) . '\' THEN 1 
           ELSE 2 END'; 

Je veux ajouter une condition dans la clause WHERE, ma condition est (WHERE Etat = '3') et je le fais comme ceci:

$query_Search = 'SELECT ID, Titre , Categorie, Description, Province , Com_Territ, Type_Annonce, Prix, Devise, Date, State 
           FROM articles 
           WHERE State='3' AND Titre LIKE \'%' . safe($_POST['q']) . '%\' OR Categorie LIKE \'%' . safe($_POST['q']) . '%\' 
           ORDER BY CASE WHEN Titre LIKE \'' . safe($_POST['q']) . '%\' THEN 0 
           WHEN Titre LIKE \'%' . safe($_POST['q']) . '\' THEN 1 
           ELSE 2 END'; 

cette requête affiche des résultats cinque États non égal à 3, il semble que ne se soucie pas de la condition (WHERE Etat = « 3 »)

+0

Eh bien .. vous avez quelques 'OR's là aussi .. Merci – putvande

Répondre

0

Vous avez OR dans votre instruction WHERE, donc il se peut que vous obteniez des colonnes qui ont State = 3 OR! autre chose.
Ajouter une ( et ) pour regrouper vos déclaration comme:

WHERE State='3' AND (Titre LIKE \'%' . safe($_POST['q']) . '%\' OR Categorie LIKE \'%' . safe($_POST['q']) . '%\') 
+0

, était une erreur de recrue – user3820187

0

Tout comme putvande mentionné ci-dessus, essayez ceci:

$query_Search = 'SELECT ID, Titre , Categorie, Description, Province , Com_Territ, Type_Annonce, Prix, Devise, Date, State 
          FROM articles 
          WHERE State='3' AND (Titre LIKE \'%' . safe($_POST['q']) . '%\' OR Categorie LIKE \'%' . safe($_POST['q']) . '%\') 
          ORDER BY CASE WHEN Titre LIKE \'' . safe($_POST['q']) . '%\' THEN 0 
          WHEN Titre LIKE \'%' . safe($_POST['q']) . '\' THEN 1 
          ELSE 2 END'; 
Questions connexes