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 :

Plusieurs jointures sur la meme table [complexe]


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut Plusieurs jointures sur la meme table [complexe]
    Bonjour a tous, comme ma question est un poil compliqué, je vas prendre pour l'illustré l'exemple de la coupe du monde de foot.

    Voila mes tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    table_pays:
    `id` VARCHAR( 2 ) NOT NULL , <- id du pays (exemple: A1, groupe A, equipe 1)
    `nom` VARCHAR( 255 ) NOT NULL , <- nom du pays
    `groupe` VARCHAR( 1 ) NOT NULL , <- groupe du pays
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    table_match:
    `id` int(3) NOT NULL auto_increment,<- id unique (on s'en occupe pas)
    `j1` char(2) NOT NULL default '',<- id de l'equipe 1
    `j2` char(2) NOT NULL default '',<- id de l'equipe 2
    `gagnant` char(2) NOT NULL default '0',<- id du gagnant ou E pour match nul
    `s1` int(2) NOT NULL default '0',<- score equipe 1
    `s2` int(2) NOT NULL default '0',<- score equipe 2
    Voila un modele de BDD classique. Bien maintenant le but de la manoeuvre est de faire le classement des equipes par points.
    Petit rappel de regles:
    gagner un match donne 2 pts
    faire match nul donne 1 pts

    Voila la requete que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT ((COUNT(t1.id)*2)+COUNT(t2.id)) AS pts
     
    FROM table_pays AS p
     
    LEFT JOIN table_match AS t1 ON t1.gagnant=p.id
     
    LEFT JOIN table_match AS t2 ON (t2.j1=p.id OR t2.j2=p.id) AND gagnant='E'
     
    WHERE groupe='A' 
     
    GROUP BY 'p.id' 
     
    ORDER BY 'pts'
    Malheureusement vous l'aurez compris ca ne marche pas. (sinon qu'est ce que je ferais la?? ^^)

    En fait la deuxieme jointure (COUNT(t2.id)) me retourne le double d'enregitrement que la vérité.

    Donc je pense que plusieurs jointure sur une meme table ce fait avec une autre syntaxe.

    Si des pros passe par la, vous me sortiriez une épigne du pieds

    Wells

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut

    Pourquoi ne pas stocker le nombre de points dans la table pays plutôt que de se lancer dans des requêtes compliquées et coûteuses ?
    Pensez au bouton

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut
    Hum disons que c'est une exemple que j'ai pris pour clarifier ma demande. Certe dans cette exemple on pourais faire plus simple.

    Maintenant tu peux aussi vouloir générer un classement sans stocker le nb de point dans la bdd

    Enfin le probleme reste entier au niveau des jointures.

Discussions similaires

  1. Plusieurs conditions sur une meme table (jointure)
    Par bugbug dans le forum Requêtes
    Réponses: 18
    Dernier message: 22/09/2009, 14h34
  2. double jointure sur la meme table
    Par erox44 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2008, 17h28
  3. 2 jointures sur une meme table
    Par amamildor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2007, 17h24
  4. Union ou jointure sur la meme table ?
    Par chris92 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 11/07/2007, 16h44
  5. [MySQL] Plusieurs jointures sur une même table
    Par stephyyr dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 14h24

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