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 paysVoila un modele de BDD classique. Bien maintenant le but de la manoeuvre est de faire le classement des equipes par points.
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
Petit rappel de regles:
gagner un match donne 2 pts
faire match nul donne 1 pts
Voila la requete que j'utilise:
Malheureusement vous l'aurez compris ca ne marche pas. (sinon qu'est ce que je ferais la?? ^^)
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'
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
Partager