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 :

Faisable avec une seule requête ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut Faisable avec une seule requête ?
    Bonjour,

    Si on a 2 tables :
    personnes (id, nom)
    liens (id, id_personne1, id_personne2)

    Est-ce que c'est possible avec une seule requête, d'avoir comme résultat, si on donne l'id d'une des personnes :
    la liste de toutes les personnes (sauf celle dont l'id est donnée)
    avec un champ qui spécifie si cette personne à un lien avec cette personne ?

    qq chose comme ça, si l'id donnée est 1 :
    id=2, nom=bidule, lié=non
    id=3, nom=truc, lié=oui
    id=4, nom=chose, lié=oui
    ...etc

    Merci si vous pouviez me donner un petit coup de main là-dessus

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Vous pouvez faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT 
        P.id, 
        P.nom,
        CASE WHEN L.id_personne1 IS NULL THEN 'non' ELSE 'oui' END AS EstLie
    FROM Personne P
    LEFT JOIN (
        SELECT id_personne1
        FROM Lien 
        WHERE id_personne2 = 'xxx'
        UNION 
        SELECT id_personne2
        FROM Lien 
        WHERE id_personne1 = 'xxx'
     
    ) L
        ON L.personne1 = P.id

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Vous pouvez faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT 
        P.id, 
        P.nom,
        CASE WHEN L.id_personne1 IS NULL THEN 'non' ELSE 'oui' END AS EstLie
    FROM Personne P
    LEFT JOIN (
        SELECT id_personne1
        FROM Lien 
        WHERE id_personne2 = 'xxx'
        UNION 
        SELECT id_personne2
        FROM Lien 
        WHERE id_personne1 = 'xxx'
     
    ) L
        ON L.personne1 = P.id
    merci beaucoup pour ta réponse !,
    quand je test cette requête j’obtiens la liste de toutes les personnes, avec le champs EstLie,
    mais le champs EstLie est toujours sur "non",
    que faut-il mettre à la place des = "xxx" ?
    j'ai essayé M.id mais ce n'est pas accessible à cet endroit ?

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par 3akycka Voir le message
    que faut-il mettre à la place des = "xxx" ?
    L'identifiant de la personne pour laquelle vous effectuez la recherche !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    L'identifiant de la personne pour laquelle vous effectuez la recherche !
    Heu oui désolé je ne suis pas très bon mais quand même, la fatigue...

    merci encore !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Par défaut A peu près, mais c'est l'idée
    Bonjour,


    Je ne connais pas My SQL, mais la solution devrait s'approcher de cela, … aux erreurs de syntaxe près :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select Copain.id as Id, Copain.Nom as Nom, if (Examinée.id is null, 'non', 'oui') as Lié
    from personnes Examinée
       right join liens
         on liens.id = Examinée.id
       inner join personnes Copain
          on Copain.id = liens.id
    where Examinée.id = 1
    Devrait donner quelque chose comme cela :

    Id Nom Lié
    -- ----- ----
    2 bidule non
    3 truc oui
    4 chose oui

    Mais avec une liste très longue, puisque vous voulez aussi voir tous ceux qui NE SONT PAS en lien avec la personne id=1 !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Formateur
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Par défaut Complément
    En fait, votre table liens semble avoir un attribut de trop.
    Elle devrait probablement être :
    Liens (id1, id2)

    Ma requête devient alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select Copain.id as Id, Copain.Nom as Nom, if (Examinée.id is null, 'non', 'oui') as Lié
    from personnes Examinée
        right join liens
          on liens.id1 = Examinée.id
        inner join personnes Copain
          on Copain.id = liens.id2
    where Examinée.id = 1

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut
    Citation Envoyé par Gérard69 Voir le message
    En fait, votre table liens semble avoir un attribut de trop.
    Elle devrait probablement être :
    Liens (id1, id2)

    Ma requête devient alors :

    Select Copain.id as Id, Copain.Nom as Nom, if (Examinée.id is null, 'non', 'oui') as Lié
    from personnes Examinée
    ....right join liens
    ......on liens.id1 = Examinée.id
    ....inner join personnes Copain
    on Copain.id = liens.id2
    where Examinée.id = 1
    Merci beaucoup aussi !
    Ça ressemble à la requête de aieeeuuuuu, en un peu différent,
    je vais essayé de la traduire en mysql pour voir...

    j'avais rajouté un id à la table Liens pour que chaque liens est un identifiant, mais peut-être que c'est en effet inutile ?...

Discussions similaires

  1. récupération multiple avec une seule requète
    Par rebel29270 dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/12/2011, 19h01
  2. count dans table externe avec une seule requête
    Par gtraxx dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/04/2011, 10h39
  3. [MySQL] Afficher les données dans un tableau html horizontal avec une seule requête au lieu de 6
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/10/2010, 11h13
  4. Réponses: 4
    Dernier message: 21/02/2010, 12h39
  5. [MySQL] Tri par champs avec une seule requête
    Par Yoks69 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/10/2008, 08h05

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