SQL : Question concernant une requête
Résolu
Moi
-
cycloop Messages postés 69 Date d'inscription Statut Membre Dernière intervention -
cycloop Messages postés 69 Date d'inscription Statut Membre Dernière intervention -
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 ?
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:
- SQL : Question concernant une requête
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
6 réponses
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.
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";
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 :
Je ne comprend plus rien :-(
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 :-(
Oops, ça marche, mais comme ceci :
C'est bizarre non ?
$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 ?
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 ;)
le problème venait peut être simplement d'une faute de frappe ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question