SQL : Question concernant une requête

Résolu/Fermé
Moi - 14 déc. 2009 à 12:52
cycloop Messages postés 69 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 8 avril 2013 - 14 déc. 2009 à 14:52
Bonjour,

Je rencontre un probleme avec une requête sql qui ne prend pas en compte toutes les conditions, mais juste une partie. Elle a pour but de sélectionner les utilisateurs ayant le "lid>0" et "pid !=xxx" et code "user_co" qui commence par x1 ou user_reg par x2 ou user_fr par x3. La requête telle quelle fonctionne, mais ne prend en compte la partie : "(lid > '0' AND pid != '$pid')". Elle est peut-être mal structurée ?

$sql2 = "SELECT user FROM membres ";
$sql2 .= "WHERE (lid > '0' AND pid != '$pid') ";
$sql2 .= "AND user_co LIKE '$codepostal%' ";
$sql2 .= "OR user_reg LIKE '$regionfr%' ";
$sql2 .= "OR user_fr LIKE '$from%' ";
$qll2 .= "OR user_planete LIKE '$planete%' ";
$sql2 .= "ORDER BY RAND() LIMIT 0,10";
A voir également:

6 réponses

cycloop Messages postés 69 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 8 avril 2013 17
14 déc. 2009 à 13:49
AND est un opérateur prioritaire sur OR. donc en fait ta requete actuelle fait ça :

WHERE ( (lid > '0' AND pid != '$pid') AND user_co LIKE '$codepostal%' ) OR [tout le reste] )

ce qu'il faut que tu fasse c'est ajouter une parenthèse avant le premier user_co LIKE...
que tu ferme à la fin.

$sql2 = "SELECT user FROM membres ";
$sql2 .= "WHERE (lid > '0' AND pid != '$pid') ";
$sql2 .= "AND (user_co LIKE '$codepostal%' ";    <<< parenthèse ouvrante
$sql2 .= "OR user_reg LIKE '$regionfr%' ";
$sql2 .= "OR user_fr LIKE '$from%' ";
$sql2 .= "OR user_planete LIKE '$planete%'  )";    <<< parenthèse fermante
$sql2 .= "ORDER BY RAND() LIMIT 0,10";
0
Merci cycloop pour ta réponse, j'avais aussi essayé comme tu as dis, mais ça ne marche pas. elle me renvoie un message d'erreur :

Error number: 1064
Error message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY RAND() LIMIT 0,10' at line 1


Je ne comprend plus rien :-(
0
Oops, ça marche, mais comme ceci :

$sql2 = "SELECT user FROM membres ";
$sql2 .= "WHERE (lid > '0' AND pid != '$pid') ";
$sql2 .= "AND (user_co LIKE '$codepostal%' ";
$sql2 .= "OR user_reg LIKE '$regionfr%' ";
$sql2 .= "OR user_fr LIKE '$from%' ";
$qll2 .= "OR user_planete LIKE '$planete%' ";
$sql2 .= ") ORDER BY RAND() LIMIT 0,10"; <----  la parenthèse doit se trouver sur cette ligne, sinon ça ne marche pas



C'est bizarre non ?
0
cycloop Messages postés 69 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 8 avril 2013 17
14 déc. 2009 à 14:42
euh je sais pas si tu as remarqué, mais dans les 2 copies de code que tu as donné, l'avant dernière ligne (celle qui bug) commence par $qll2 au lieu de $sql2.

le problème venait peut être simplement d'une faute de frappe ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Franchement je ne sais pas comment te remercier, j'avais totalement passer à côté de cette erreur de frape, ça venait bien de cette erreur de frape. Il me faut des congés, parce que pour passer à coté de ça, il faut être trop fatigué :-)

C'est donc résolu. Merci encore et bonne journée à toi :-)
0
cycloop Messages postés 69 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 8 avril 2013 17
14 déc. 2009 à 14:52
Bonne journée à toi aussi. Ravi d'avoir pu résoudre ces petits problèmes qui pourrissent souvent beaucoup plus la vie qu'ils ne le devraient ^^
0