IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

requete between restriction qui ne marche pas


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut requete between restriction qui ne marche pas
    Bonsoir,

    J'ai un soucis avec une requête. Elle ne me renvoi aucune erreur mais elle ne fonctionne pas comme je le veux. Une de mes lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE link_frais.id_frais=2
    ne fonctionne pas (n'est pas pris en considération).
    Je récupère bien les lignes avec les bonnes dates mais id_frais n'est pas toujours égale a 2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * 
    FROM frais
     INNER JOIN client ON client.id_client = frais.id_client
     INNER JOIN link_frais ON link_frais.id_frais = frais.id_frais 
    INNER JOIN moule ON moule.id_moule = link_frais.id_moule 
    WHERE link_frais.id_frais=2
     AND date_debut  BETWEEN '2011-09-01' AND '2011-09-02' 
    OR date_fin  BETWEEN '2011-09-01' AND '2011-09-02';

  2. #2
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Bonjour,

    Revoyez les priorités des opérateurs : AND est prioritaire sur OR.
    Votre requête doit probablement s'écrire (même si je ne sais pas vraiment ce que vous voulez faire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * 
    FROM frais
     INNER JOIN client ON client.id_client = frais.id_client
     INNER JOIN link_frais ON link_frais.id_frais = frais.id_frais 
    INNER JOIN moule ON moule.id_moule = link_frais.id_moule 
    WHERE link_frais.id_frais=2
     AND (date_debut  BETWEEN '2011-09-01' AND '2011-09-02' 
    OR date_fin BETWEEN '2011-09-01' AND '2011-09-02');

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Par défaut mieux vaut mettre les parenthèses même si elles ne sont pas nécessaires.
    Dans ce cas il n'y aura pas d'erreur d’exécution, ni d'erreur dans la sélection.
    A l'inverse si vous ne mettez pas des parenthèses nécessaires vous risquez ce genre de soucis
    Le Porc est un loup pour le Porc.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Exact c’était bien un problème de parenthèse.
    Merci

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Par défaut mieux vaut mettre les parenthèses même si elles ne sont pas nécessaires.
    Non ! On ne met de parenthèse que si elles sont nécessaires !
    Et là elles le sont.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Non ! On ne met de parenthèse que si elles sont nécessaires !
    Et là elles le sont.
    Mouais, chacun fait comme il le sent mais à partir du moment ou j'utilise un OR je met systématiquement les parenthèse, même si non nécessaire, ne serait-ce que par soucis de lisibilité.
    Bien évidemment je ne mets pas non plus 2 ou 3 paires de parenthèses pour entourer une expression...
    Le Porc est un loup pour le Porc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] condition avec requete qui ne marche pas ..sous ie
    Par esti89 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/06/2008, 09h53
  2. pb de requete qui ne marche pas sur pl sql
    Par smartsorft dans le forum SQL
    Réponses: 6
    Dernier message: 15/01/2008, 15h14
  3. Requete avec champs calculés qui ne marche pas
    Par The_Super_Steph dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/06/2007, 14h39
  4. [DEBUTANT] "BETWEEN" qui ne marche pas
    Par Interruption13h dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/03/2007, 16h31
  5. requete SQl avec la fonction max () qui ne marche pas
    Par eclipse012 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo