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

Langage SQL Discussion :

variables dans la clause where


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut variables dans la clause where
    Bonjour tous les gens du forum !!

    j'y ai passé ma soirée hier sur ce problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT date_format(rencontres.date_rencontre,'%d/%m/%Y') AS date, rencontres.nom_locaux_rencontre AS locaux, rencontres.nom_visiteurs_rencontre AS visiteurs, rencontres.niveau_rencontre AS niveau, rencontres.categorie_rencontre AS categorie, rencontres.fonction_rencontre AS fonction
    FROM rencontres
    WHERE rencontres.date_rencontre> curdate AND rencontres.date_rencontre between '2008-07-01' and '2009-06-30' AND rencontres.disputer_rencontre = 'oui' AND rencontres.num_locaux_rencontre ='$num_equipe' or  rencontres.num_visiteurs_rencontre='$num_equipe'
    ORDER BY rencontres.date_rencontre
    J'ai fait des tests :
    quand j'abandonne "AND rencontres.date_rencontre between '2008-07-01' and '2009-06-30'"
    la requête fait bien le trie par les variables " AND rencontres.num_locaux_rencontre ='$num_equipe' or rencontres.num_visiteurs_rencontre='$num_equipe'

    et la réciproque est vrai : quand j'abandonne l'autre condition le trie est bien fait par la date.
    Le problème vient du fait qu'il n'arrive pas à faire le trie par la date et par les variables en même temps.J'ai fais le tour des autres forums et certains ajoutent la concaténation et d'autres disent que c'est inutile.

    AND rencontres.num_locaux_rencontre =.'$num_equipe'. or rencontres.num_visiteurs_rencontre=.'$num_equipe'.

    merci pour votre aide ...

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    Attention quand vous parlez de tri, on a tendance à penser à l'ordre de vos données, or ici j'ai l'impression que vous parlez d'un problème de filtre.
    Essayez simplement de mettre des parenthèses sur votre dernière condition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
           date_format(rencontres.date_rencontre,'%d/%m/%Y') AS date, 
           rencontres.nom_locaux_rencontre AS locaux, 
           rencontres.nom_visiteurs_rencontre AS visiteurs, 
           rencontres.niveau_rencontre AS niveau, 
           rencontres.categorie_rencontre AS categorie, 
           rencontres.fonction_rencontre AS fonction
    FROM rencontres
    WHERE rencontres.date_rencontre> curdate 
    AND rencontres.date_rencontre between '2008-07-01' and '2009-06-30' 
    AND rencontres.disputer_rencontre = 'oui' 
    AND (rencontres.num_locaux_rencontre ='$num_equipe' 
    or  rencontres.num_visiteurs_rencontre='$num_equipe')
    ORDER BY rencontres.date_rencontre

  3. #3
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Bonjour,
    Attention quand vous parlez de tri, on a tendance à penser à l'ordre de vos données, or ici j'ai l'impression que vous parlez d'un problème de filtre.
    Essayez simplement de mettre des parenthèses sur votre dernière condition.
    vous avez raison, c'est bien un problème de filtre. Je testerai avec les parenthèses ce soir. Vous pensez que ça pourrait venir d'autre chose ou pas?

    Merci d'avance !!!

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Et bien, tout dépend de ce que vous cherchez à afficher, mais j'imagine que votre problème vient bien de là.

    Si vous ne mettez pas les parenthèses, il suffira que la clause rencontres.num_visiteurs_rencontre='$num_equipe' soit vérifiée pour que la ligne soit ramenée.

    Exemple, parce que je suis pas très doué pour les explications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClauseWhere = Condition1 ET Condition2 OU Condition3
    Ici, une ligne qui vérifie la Condition3 sera ramenée, que les deux autres conditions soient vérifiées ou pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClauseWhere = Condition1 ET (Condition2 OU Condition3)
    Ici, on ne ramène une ligne que si elle vérifie la Condition1, et au moins l'une des deux autres.

    Je vous renverrai bien vers un tuto sur les opérateurs logiques et l'algèbre de Boole, mais j'ai un peu peur que ça vous les brise justement

  5. #5
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    pour illustration :

    en 2008 : equipe A vs equipe B
    en 2009 : equipe C vs equipe D
    en 2008 : equipe B vs equipe C
    en 2009 : equipe D vs equipe A

    chaque équipe est appellée par '$num_equipe' et chaque équipe est tour à tour à domicile et à l'extérieur ( d'ou : rencontres.num_locaux_rencontre et rencontres.num_visiteurs_rencontre)

    je souhaite regrouper le listing des matchs par equipe et limiter les recherche par date pour les afficher dans des cadres différents.

    ex pour equipe A :

    En 2008
    equipe A vs equipe B

    en 2009
    en 2009 : equipe D vs equipe A
    j'espère que l'illustration saura bien illustrer le problème ...

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Oui, par contre à quoi correspond curdate dans votre requête?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rencontres.date_rencontre> curdate 
    AND rencontres.date_rencontre BETWEEN '2008-07-01' AND '2009-06-30'
    Si c'est bien la date courante, la requête ne ramènera jamais rien, car date_rencontre ne peut pas être à la fois supérieure à aujourd'hui ET comprise entre '2008-07-01' et '2009-06-30'.

    Si vous souhaitez afficher par année, ajoutez plutot une colonne dans votre select qui extrait l'année de date_rencontre, et que vous pourrez utiliser pour gérer votre affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
           EXTRACT(YEAR FROM date_rencontre) AS Annee,
           date_format(rencontres.date_rencontre,'%d/%m/%Y') AS date, 
           rencontres.nom_locaux_rencontre AS locaux, 
           rencontres.nom_visiteurs_rencontre AS visiteurs, 
           rencontres.niveau_rencontre AS niveau, 
           rencontres.categorie_rencontre AS categorie, 
           rencontres.fonction_rencontre AS fonction
    FROM rencontres
    WHERE rencontres.disputer_rencontre = 'oui' 
    AND (rencontres.num_locaux_rencontre ='$num_equipe' 
    OR  rencontres.num_visiteurs_rencontre='$num_equipe')
    ORDER BY rencontres.date_rencontre
    Et si vous voulez n'afficher que les n dernières années, toujours en admettant que curdate soit la date du jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
           EXTRACT(YEAR FROM date_rencontre) AS Annee,
           date_format(rencontres.date_rencontre,'%d/%m/%Y') AS date, 
           rencontres.nom_locaux_rencontre AS locaux, 
           rencontres.nom_visiteurs_rencontre AS visiteurs, 
           rencontres.niveau_rencontre AS niveau, 
           rencontres.categorie_rencontre AS categorie, 
           rencontres.fonction_rencontre AS fonction
    FROM rencontres
    WHERE rencontres.disputer_rencontre = 'oui' 
    AND (rencontres.num_locaux_rencontre ='$num_equipe' 
    OR  rencontres.num_visiteurs_rencontre='$num_equipe')
    AND EXTRACT (YEAR FROM date_rencontre) >= EXTRACT(YEAR FROM curdate)-n
    ORDER BY rencontres.date_rencontre
    N'hésitez pas à préciser votre SGBD.

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

Discussions similaires

  1. Problème de variable dans la clause WHERE avec CONVERT + DATE
    Par Archi89 dans le forum Développement
    Réponses: 4
    Dernier message: 09/01/2015, 20h35
  2. [OPTIMISATION] Date en tant que variable dans les clauses WHERE
    Par dens19 dans le forum Développement
    Réponses: 11
    Dernier message: 18/09/2009, 08h57
  3. [MySQL] Introduire une variable dans la clause where
    Par ledisciple dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/08/2009, 12h39
  4. Réponses: 7
    Dernier message: 28/04/2009, 23h26
  5. Réponses: 3
    Dernier message: 11/12/2005, 11h15

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