SQL : Question concernant une requête

Résolu
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";
Configuration: Windows XP
Firefox 3.5.5

6 réponses

  1. 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 ^^
    1. 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 :-)
      1. 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 ;)
        1. 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 ?
          1. 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 :-(
            1. 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";