Requete SQL avec AND

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requete SQL avec AND

par Victor BRITO » 03 août 2008, 22:52

Je sais que il y a des as qui connaissent par coeur les règles de préséance des opérateurs, mais il faut penser à nous, ceux qui aimons bien l'explicite.
En absence de parenthèses, les opérateurs AND et && sont prioritaires par rapport aux opérateurs OR, || et XOR. Donc, dans le contexte de la requête en question, et compte tenu de ce qu'on requiert, les parenthèses sont utiles pour englober les "modele OR modele OR modele".

Pour les règles de précédence des opérateurs, le manuel de MySQL y consacre une section : il suffit de chercher. ;)

par caroube » 03 août 2008, 20:50

et puis pour finaliser le tout, quand tu as des OR et des AND, mets des parenthèses. Au moins, ça évite d'avoir à se poser des questions pour savoir si le status, c'est quand le modele vaut 0 uniquement ou si c'est quelque soit la valeur du modele.
Je sais que il y a des as qui connaissent par coeur les règles de préséance des opérateurs, mais il faut penser à nous, ceux qui aimons bien l'explicite.

Code : Tout sélectionner

SELECT champ_1, champ_2, champ_3 FROM fiche WHERE status = 1 AND (modele = 0 OR modele BETWEEN 170 AND 174 OR modele BETWEEN 177 AND 194 OR modele BETWEEN 260 AND 270)

par Tracker » 02 août 2008, 20:50

Si tu as tout à récupérer, laisse * ça clarifie le code et ça ne change rien du tout.
Après c'est le type de sujet à faire des débats interminables...

Sékiltoyai +1: Vérifie quand même tes types.

Tracker.

par flotix » 02 août 2008, 19:30

  1. Jamais de SELECT *, on précise les champs à retourner
  2. Pas d'apostrophes sur des données numériques
  3. Si les valeurs testées se suivent, utiliser les intervalles (opérateur BETWEEN plus optimisé que le IN)
d'où...

Code : Tout sélectionner

SELECT champ_1, champ_2, champ_3 FROM fiche WHERE status = 1 AND modele = 0 OR modele BETWEEN 170 AND 174 OR modele BETWEEN 177 AND 194 OR modele BETWEEN 260 AND 270
Tout de même plus clair, non ? ;)
Hum en ce qui concerne le * je sait que c'est pas top au niveau ressources mais si on à vraiement TOUS à récupérer?

Et quels sont les iconvenients Hormis le cpu?

Sinon mon prob est résolu! Merci à Tracker! :)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par albat » 02 août 2008, 16:08

  1. Jamais de SELECT *, on précise les champs à retourner
  2. Pas d'apostrophes sur des données numériques
  3. Si les valeurs testées se suivent, utiliser les intervalles (opérateur BETWEEN plus optimisé que le IN)
d'où...

Code : Tout sélectionner

SELECT champ_1, champ_2, champ_3 FROM fiche WHERE status = 1 AND modele = 0 OR modele BETWEEN 170 AND 174 OR modele BETWEEN 177 AND 194 OR modele BETWEEN 260 AND 270
Tout de même plus clair, non ? ;)

par Sékiltoyai » 02 août 2008, 15:44

[ps] si ta colonne modèle est de type numérique, enlève les quotes autour de tes valeurs.
Dans le cas contraire, il est fort probable que ta table soit mal modélisée…

par albat » 02 août 2008, 15:39

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

par Tracker » 02 août 2008, 15:28

+1

utilise l'opérateur IN, ça raccourcira l'écriture en "simulant" le OR que tu aurais dû mettre dès le départ:
SELECT * FROM `fiche` WHERE `modele` in ('170', '171', '172', etc... )
[ps] si ta colonne modèle est de type numérique, enlève les quotes autour de tes valeurs.


Tracker.

par ouckileou » 02 août 2008, 14:22

Comment la colonne "modele" pourrait elle avoir plusieurs valeurs en même temps ?

Requete SQL avec AND

par flotix » 02 août 2008, 14:15

Bonjour,

Voilà je fait générer une requête SQL, celle-ci contient beaucoup d'argument mais elle n'affiche rien alors qu'elle contient effectivement des enregistrement bon à afficher.

J'ai tester la requête directement via PHPmyAdmin, même résultat.
Soit ma requête n'est pas correct ou alors la fonction AND est limitée....

Code : Tout sélectionner

SELECT * FROM `fiche` WHERE `modele`='170' AND `modele`='171' AND `modele`='172' AND `modele`='173' AND `modele`='174' AND `modele`='261' AND `modele`='177' AND `modele`='178' AND `modele`='179' AND `modele`='180' AND `modele`='181' AND `modele`='182' AND `modele`='183' AND `modele`='184' AND `modele`='185' AND `modele`='186' AND `modele`='187' AND `modele`='188' AND `modele`='189' AND `modele`='190' AND `modele`='191' AND `modele`='192' AND `modele`='193' AND `modele`='194' AND `modele`='260' AND `modele`='262' AND `modele`='263' AND `modele`='264' AND `modele`='265' AND `modele`='266' AND `modele`='267' AND `modele`='268' AND `modele`='269' AND `modele`='270' AND `modele`='0' AND `status`='1'
Merci d'avance pour votre aide