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 complexe, jonture ou sous requete ?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut requete complexe, jonture ou sous requete ?
    Salut tout le monde, fidèle lecteur de ce forum, d'habitude j'arrive à me débrouiller juste en lisant, mais là j'avoue que je suis un peu bloqué.

    J'arrive pas à trouver la requête pour ça :

    USER (id,nom, prenom);
    GROUP (id,nom);
    USERGROUP (userid ,usergroup);

    Je voudrais donc récupérer tous les utilisateurs ayant le meme GROUP, ainsi que le nom du GROUP. Je ne veux pas voir plusieurs fois le meme USER dans mon résultat.
    J'oubliais, il me faut récupérer les utilisateurs du meme group qu'un utilisateur donné, par exemple le user ayant pour id = 9

    J'ai essayer ça mais ca me convient pas :
    SELECT distinct user.* FROM user HAVING USER_ID IN (SELECT userid FROM usergroup WHERE userid = '9')

    Pouvez me mettre sur la voie , please ???

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut
    Je ne comprends pas l'utilité de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT userid FROM usergroup WHERE userid = '9'
    Tu cherche un id que tu connais déjà ??

    Essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINT(ug.userid) FROM usergroup ug WHERE ug.usergroup = 
    (SELECT ug2.usergroup FROM usergroup ug2 WHERE ug2.userid=9)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Oui en effet je cherche à un id que je connait déjà.

    Alors ça marche, mais comme il faut. Si l'id recherché appartient à 2 group, mysql me retourne une erreur : Subquery returns more than 1 row.
    Logique je pense.

    Donc en modifiant la requete que tu m'as donné ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT ug.userid FROM usergroup ug WHERE ug.group IN (SELECT ug2.group FROM usergroup ug2 WHERE ug2.userid="9")
    Il me suffisait de mettre IN à la place de =

    En tout cas merci pour ton aide ionesco

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut
    De rien.

    En effet il fallait remplcer le = par IN. Je me demande s'il n'y pas moyen de faire plus optimisé avec une autojointure, car MySQL parfois n'aime pas trop les sous requêtes. Mais dans ton cas je pense que ca ira.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Alors effectivement il est aussi possible de le faire avec une auto jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT ug.userid FROM usergroup ug,usergroup ug2 WHERE ug.group = ug2.group AND ug2.userid = "9"
    Et il me semble que la requête est moins complexe à exécuter pour MySQL.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut
    Il ne te manque plus que de l'écrire avec la norme SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT ug.userid FROM usergroup ug
    JOIN usergroup ug2 ON ug2.GROUP = ug.GROUP 
    WHERE ug2.userid = 9

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    ah moué, c'est plus propre comme ça !!

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

Discussions similaires

  1. Requete avec update et sous requete
    Par rosedeeps dans le forum Développement
    Réponses: 1
    Dernier message: 23/10/2008, 19h29
  2. Mysql : requete complexe ou multitude de requete ?
    Par serge1973 dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/11/2007, 13h02
  3. Réponses: 2
    Dernier message: 04/06/2004, 11h11
  4. probleme de sous requete
    Par JD_Lyon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/04/2004, 22h18
  5. Requete avec une sous-requete... Ne fonctionne qu'a moitie..
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 18/08/2003, 09h54

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