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 :

Requête sur plusieurs champs


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Requête sur plusieurs champs
    Bonjour,

    Pour commencer je voudrais m'excuser de la non-clarté de l'intitulé du post car il m'est difficile de mieux expliquer le souci que je rencontre.

    Pour simplifier mon problème voici la situation :

    Je travaille sur une application php/mysql dont l'objectif est de gérer un ensemble de personnes (experts) possédant un nombre variable de compétences. J'en arrive au moment où je dois effectuer une requête qui me trouve toutes les personnes qui possèdent certaines compétences à un certain niveau.

    Voici sommairement l'architecture des différentes tables :

    table_experts
    id | lastname | firstname | mail | ....
    1 Marley Bob
    2 Coben Kurt

    table_competences
    id | expert_id | name | value
    1 1 X 3
    2 1 Y 4
    3 1 Z 4
    4 1 A 2
    5 2 X 4
    6 2 Y 4
    7 2 Z 4
    8 3 X 3
    9 3 Y 3
    10 3 Z 3

    Bon la première chose c'est que le choix de cette structure a été adoptée car le nombre de compétences d'un expert est variable (est-ce bien la bonne solution?)

    Le vrai problème que je rencontre c'est que je dois afficher la liste des experts qui ont exactement telles compétences à tel niveau. Plus précisément, je veux par exemple tous les experts qui possède AU MOINS les compétence X=4 et Y=4 et z=4.
    Donc ici le résultat de la requête ne doit me donner que l'expert_id 2.

    J'ai bien regardé les requêtes en utilisant AND et OR, les jointures, etc.
    Mais je n'arrive pas à trouver comment faire en sorte de trouver les experts qui ont : name=X, level=4 ET name=Y, level=4 ET name=Z, level=4.

    Je ne suis pas sûr d'avoir été très clair et j'en suis désolé. Cependant, je suis persuadé que ce genre de problème arrive fréquemment, mais je ne vois pas comment "nommer" ce genre de souci dans google ou sur le forum (d'où mon problème d'intitulé de post).

    Merci à vous^^.

  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
    salut,

    essaie quelque chose dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select expert_id 
    from table_competence
    where (name= 'x' and value=4)
    or (name='y' and value=4)
    or (name='z' and value=4)
    group by expert_id
    having count(*)=3

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je viens d'essayer la solution, c'est parfait. Juste adapté à la demande c'est vraiment impeccable, encore merci^^.

    J'ai un peu regardé sur internet comment fonctionnait "HAVING count(*)=3", et j'ai pu obtenir quelques réponses. Si j'ai bien compris HAVING permet l'ajout d'une conditionnelle?, "3" correspond au nombre de critère a vérifier? , par contre "*" je ne vois a quoi elle sert. Si tu pouvais m'indiquer en détail cette ligne ca serait sympa^^.

    En tout ca cela marche parfaitement.

    Merci encore^^.

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Tout est expliqué dans cet excellent tutoriel : http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L2

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  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
    HAVING est un WHERE qui porte sur le résultat d'un groupement. Dans ton cas, la requête demande de grouper par expert_id et de ne garder que les groupes de 3 lignes ; celles répondant aux 3 critères du WHERE.
    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 !

Discussions similaires

  1. Requête sur plusieurs champs tout en comptant!
    Par TekFanatiX dans le forum Langage SQL
    Réponses: 11
    Dernier message: 08/12/2008, 09h59
  2. Comment créer une sous requête sur plusieurs champs?
    Par Anonymouse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/06/2008, 09h13
  3. Requête sur plusieurs champs avec LIKE
    Par zestrellita dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/04/2007, 14h58
  4. Requête sur plusieurs champs
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/02/2007, 16h33
  5. Requête sur plusieurs champs
    Par pierrot67 dans le forum Bases de données
    Réponses: 6
    Dernier message: 21/02/2007, 10h51

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