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 :

Un problème dans une clause WHERE


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 130
    Points
    130
    Par défaut Un problème dans une clause WHERE
    Bonjour et merci de me lire...

    Je vous pose mon soucis sous forme d'exemple.

    Admettons la table 'essai' comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    id | ref | age  | ville    | dpt
    ---|-----|------|----------|----
     1 |  2  |  23  | grenoble | 38
     2 |  2  |  24  | crolles  | 38
     3 |  8  |  24  | crolles  | 38
     4 |  8  |  23  | grenoble | 38
     5 |  7  |  23  | grenoble | 38
     6 |  7  |  24  | paris    | 75
    Je souhaite récupérer les DISTINCT age où :
    => ref = 2 et dpt = 38
    => ref = 8 et ville LIKE grenoble

    J'arrive à le faire pour un cas mais pas pour le cumul des 2.
    Dans le 1er cas, je dois avoir 23 et 24.
    Dans le 2ème cas, je dois avoir 23.
    J'aimerais cumuler les 2 pour n'avoir qu'une seule fois 23.

    J'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT age FROM essai 
    WHERE (ref=2 AND dpt=38) AND (ref=8 AND ville LIKE grenoble)
    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    bonjour,

    je suppose que ta requête ne te retourne rien puisqu'un tuple ne peut pas avoir deux valeurs différentes
    de plus pourquoi tu utilises like et pas = ?

    je te propose la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ref FROM essai 
    WHERE (age=23 AND ville = 'grenoble') 
    OR (age=24 AND ville = 'paris')
    group by ref
    having count(*)=2

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 130
    Points
    130
    Par défaut
    suis vraiment désolé et confus cybher... Me suis rendu compte que mon exemple correspondait pas très bien à ce que je voulais faire et j'ai édité et modifié pas mal mon message de base...
    Je vais quand même voir si je peux pas m'inspirer de ta réponse...

    EDIT : Je pense que je vais pouvoir m'en inspirer même en ayant changé mon exemple...

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    Citation Envoyé par manu_71 Voir le message
    EDIT : Je pense que je vais pouvoir m'en inspirer même en ayant changé mon exemple...
    oui, cela reste le même principe

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 130
    Points
    130
    Par défaut
    Tout à fait, ça fonctionne bien. Je vais essayer de décrypter cette requête afin de ne pas utiliser bêtement mais aussi de comprendre...

    Sinon le like était en effet inutile dans l'exemple. Mais à la base, c'est pas des villes dans ma vraie base de données. Ce sont des e-mails. Et j'ai besoin du LIKE dans ce cas présent. Ce qui ne change pas grand chose.
    J'ai modifié pour mettre des villes car ça me semblait plus facile d'inventer des villes que d'inventer des e-mails

    On pourrait dire ville LIKE 'gre' pour être fidèle à ce que je fais sur mes e-mails.

    En tout cas merci beaucoup !

    PS : Ceci dit j'avoue ne pas trop capter le HAVING COUNT(*)=2... Si tu peux m'expliquer, c'est cool !

  6. #6
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    pour le like, n'oublie pas de mettre '%', sinon cela ne va pas marcher

    pour revenir sur la requête, on sélectionne les lignes qui remplissent un des 2 critères (age 23 et grenoble) ou (age 24 et paris)
    pour avoir les deux, on doit grouper et compter ceux qui remonte deux, donc qui remplissent les deux critères.

    Pour comprendre, effectue ces différentes requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ref FROM essai 
    WHERE (age=23 AND ville = 'grenoble') 
    OR (age=24 AND ville = 'paris')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ref, count(*)  FROM essai 
    WHERE (age=23 AND ville = 'grenoble') 
    OR (age=24 AND ville = 'paris')
    group by ref

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 130
    Points
    130
    Par défaut
    Ok, donc si je veux ajouter un 3ème critère, je fais de même avec count(*)=3 donc (si j'ai bien compris) et ainsi de suite si j'ai encore plus de critères...

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    tu as tout compris

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 162
    Points : 130
    Points
    130
    Par défaut
    Merci pour la réponse rapide et très bien expliqué.

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

Discussions similaires

  1. problème de Contains dans une clause where
    Par niko59480 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 13/12/2012, 14h02
  2. Utiliser un alias de colonne dans une clause Where MS SQL
    Par sir dragorn dans le forum Langage SQL
    Réponses: 11
    Dernier message: 12/10/2011, 09h31
  3. Réponses: 1
    Dernier message: 03/02/2006, 12h35
  4. fonction booleenne dans une clause where ?
    Par user_h dans le forum Oracle
    Réponses: 1
    Dernier message: 20/10/2005, 15h05

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