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 :

Petit bloquage sur join


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Par défaut Petit bloquage sur join
    Bonjour,

    Hier soir je bloquais sur une requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select u.id, civilite, nom, prenom, u.email, ville, boolNewletter, boolTelepage1, boolTelepage2,
    numQcm1, dateInscription, count(i.idUsers) as nbr_invitations
    from users as u
    left join invitations as i on u.id=i.idUsers 
    group by u.id
    comme çà la requette fonctionne très bien, par contre si j'ajoute une ligne pour faire une jointure avec une autre table encore çà me multiplie nbr_invitation par 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select u.id, civilite, nom, prenom, u.email, ville, boolNewletter, boolTelepage1, boolTelepage2,
    numQcm1, dateInscription, count(i.idUsers) as nbr_invitations
    from users as u
    left join invitations as i on u.id=i.idUsers
    left join players as p on u.id=p.idUsers  
    group by u.id
    seriez vous ce qu'il faudrai que je fasse pour que la jointure sur une autre table encore ne multiplie pas par 2 nbr_invitations ?

    sachant que ma requette n'est pas encore terminé après donc j'ajoute pas cette ligne pour la beautée du geste


    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 48
    Par défaut
    Bonjour,

    En fait , je pense que ta table Player doit avoir plusieurs fois des id identiques.
    Par hasard, un Users n'auraient-il pas 2 Players possibles?
    Si c'est le cas, le nombre d'enregistrements est multiplié par 2.
    Si tu ne veux pas de cela tu peux regarder GROUP_CONCAT
    http://dev.mysql.com/doc/refman/5.0/...functions.html



    A+

  3. #3
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Par défaut
    Citation Envoyé par LoveBuzz
    Par hasard, un Users n'auraient-il pas 2 Players possibles?
    oui c'est bien possible

    et dans mon exemple là il y avait 2 lignes pour mon user

    Mais j'arrive pas à me servir de GROUP_CONCAT

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 48
    Par défaut
    re,

    Il faut faire un group_concat sur un champ de la table Player générant des doublons.
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT u.id, civilite, nom, prenom, u.email, ville, boolNewletter, boolTelepage1, boolTelepage2,
    numQcm1, dateInscription, count(i.idUsers) AS nbr_invitations
    , GROUP_CONCAT(p.id)
    FROM users AS u
    LEFT JOIN invitations AS i ON u.id=i.idUsers
    LEFT JOIN players AS p ON u.id=p.idUsers  
    GROUP BY u.id

    Si cela ne marche pas, il est possible que ta version de MySql ne soit pas compatible avec cette fonctionnalité.


    Sinon une idée possible est de faire une sous requête sur ta table Player pour avoir une unicité du champ Id avec un group by. Mais cela dépend vraiment de ce que tu veux récupérer comme données de ta table Player. Puis avec cette sous-requête, tu fais une jointure avec ta requête de base.

    A+

  5. #5
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Par défaut
    je suis en mysql 4.0

    moi ce que j'aimerai c'est exactement comme pour nbr_invitations, pouvoir récupérer nbr_participations pour connaitre également le nombre de participations du users dans la table players

    et je galere un peu là pour y faire dans une seule requete

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Par défaut
    Je gualère toujours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT u.id, civilite, nom, prenom, u.email, ville, boolNewletter, 
    boolTelepage1, boolTelepage2, numQcm1, dateInscription, 
    count( i.idUsers ) AS nbr_invitations, count( p.idUsers ) AS nbr_participations
    FROM users AS u, (SELECT idUsers FROM invitations) AS i, 
    (SELECT idUsers FROM players) AS p
    GROUP BY u.id
    Avec cette requette il me sort exactement le même nbr_invitations et nbr_participations pour tous les utilisateurs, en faite il multiplie les lignes qu'il trouve dans les tables invitations et players

    quelqu'un aurai une idée pour que je m'en sorte ?

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

Discussions similaires

  1. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  2. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28
  3. [Kylix] Petit Récapitulatif sur Kylix3
    Par PtitD@v dans le forum EDI
    Réponses: 1
    Dernier message: 24/02/2004, 14h46
  4. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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