Bonsoir à tous,
je travaille sur une table contenant des résultats de matchs de foot.
Voici un aperçu de cette table nommée "matches" : https://imageshack.com/i/p89Cwf14p
Les champs equipe_dom et equipe_ext font référence à l'id des équipes ayant joué à domicile et à l'extérieur pour chaque match.
Voici un aperçu de la table faisant référence aux id des équipes. Elle se nomme "equipes" : https://imageshack.com/i/pbc5rGsUp
Le champ championnat_id fait référence à l'id de la compétition dans laquelle chaque matche est joué.
Voici un aperçu de la table faisant référence aux id des compétitions. Elle se nomme "championnats" : https://imageshack.com/i/ipSr3CuTp
Pour finir, je m'intéresse uniquement à un certains nombre d'équipes (17), ce qui explique la condition WHERE sur certaines id d'équipes dans la requête qui va suivre.
Maintenant que le décor est planté, voici la requête qui pose problème. J'aimerais compter le nombre de fois où chaque équipe qui m'intéresse à fait match nul à domicile, dans certaines compétitions je connais l'id.
Quand j'exécute la requête sans mettre condition sur la compétition, tout marche nickel :
Dans mon résultat, les équipes ayant fait 0 match nul sont affichées avec une valeur de count = 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT eq.id, eq.nom, count(ma.id) mj FROM equipes eq LEFT OUTER JOIN matches ma ON eq.id = ma.equipe_dom AND ma.score_dom = ma.score_ext WHERE (eq.id = 1 or eq.id = 3 or eq.id = 5 or eq.id = 6 or eq.id = 7 or eq.id = 8 or eq.id = 10 or eq.id = 11 or eq.id = 12 or eq.id = 13 or eq.id = 14 or eq.id = 15 or eq.id = 16 or eq.id = 31 or eq.id = 53 or eq.id = 104 or eq.id = 131) GROUP BY eq.id ORDER BY eq.id
Mais lorsque je veux donner une condition sur la compétition, ce qui implique par conséquent de faire une jointure avec la table "championnats", la requête suivante pose problème :
Dans mon résultat, j'ai bien le tri fait sur les compétitions désirées, mais les équipes ayant fait 0 match nul ne sont plus affichées
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT eq.id, eq.nom, count(ma.id) mj FROM equipes eq LEFT OUTER JOIN matches ma ON eq.id = ma.equipe_dom INNER JOIN championnats ch ON ma.championnat_id = ch.id AND ma.score_dom = ma.score_ext WHERE (eq.id = 1 or eq.id = 3 or eq.id = 5 or eq.id = 6 or eq.id = 7 or eq.id = 8 or eq.id = 10 or eq.id = 11 or eq.id = 12 or eq.id = 13 or eq.id = 14 or eq.id = 15 or eq.id = 16 or eq.id = 31 or eq.id = 53 or eq.id = 104 or eq.id = 131) AND (ch.id = 20 or ch.id = 5 or ch.id = 7 or ch.id = 14 or ch.id = 16) GROUP BY eq.id ORDER BY eq.id
J'espère avoir été clair dans l'élaboration de mon problème !
D'avance merci pour votre réponse
Partager