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