Bonjour à tous,
Je travaille sur un site de poker, et j'ai créé une requête qui récupère les joueurs les résultats les points etc ... afin de générer un classement général.
Voici ma requête :
La table comprofiler est la table des joueurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT firstname , lastname , COALESCE(SUM(points), 0) + (COUNT(r.id_joueur) * 10) AS points , COUNT(r.id_joueur) AS nb_tournoi , COUNT(CASE WHEN r.position < 9 THEN 1 ELSE NULL END) AS nbfinaletable , COUNT(CASE WHEN r.position = 1 THEN 1 ELSE NULL END) AS nbvictoire , MIN(r.position) AS meilleure_pos , MAX(r.position) AS mauvaise_pos FROM jos_comprofiler c LEFT OUTER JOIN jos_tournament_results r ON c.id = r.id_joueur LEFT OUTER JOIN jos_tournament_points p ON r.position = p.position INNER JOIN jos_eventlist_events e ON e.id = r.id_tournoi INNER JOIN jos_eventlist_categories cat ON cat.id = e.catsid GROUP BY c.id ORDER BY points DESC , nb_tournoi DESC , nbfinaletable DESC , meilleure_pos
La table tournament_results est la table des résultats.
La table tournament_points est la grille de points attribués.
La table jos_eventlist_events est la table des tournois et jos_eventlist_categories la table des catégories des tournois.
Je fais un GROUP BY par id_joueur car je fais le total des points du joueur.
Voilà, tout fonctionne très bien mise à part une seule chose.
Les joueurs n'ayant jamais participé à un tournoi (qui existe dans la table joueurs "comprofiler" mais pas dans la table résultats "tournament_results") n'apparait pas dans mon classement général.
Je pensais que LEFT OUTER JOIN servait à ça. C'est peut être l'association de LEFT OUTER JOIN avec GROUP BY qui pose problème.
Pour avoir une petite idée, le classement général est disponible à cette adresse.
Le classement comporte 60 entrées, or le club de poker comporte 70 personnes, 10 personnes ayant raté les premiers tournois.
Pouvez-vous m'aider svp ?
Merci par avance.
Partager