Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2007, 12h24   #1
Invité de passage
 
Inscription : septembre 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1
Points : 0
Points : 0
Par défaut [SQL] Jointure de table avec SUM et GROUP BY

Bonjour,

Je m'occupe du site d'un club de foot et j'aimerais afficher les 5 meilleurs buteurs du club pour la saison en cours et pour cela je dois joindre les informations contenues dans 4 tables que je résume pour faire simple:

- players (player_id, player_lastname, player_firstname)
- calendrier (calendrier_id, datedumatch, saison_id, adversaire)
- saison (saison_id, saison_name, saison_start, saison_finish
- stats (stats_id, buts, player_id, calendrier_id)

à l'heure actuelle j'arrive à afficher les 5 meilleurs buteurs... mais de l'histoire en faisant ma requête uniquement sur la table stats. J'arrive à récupérer le player_id et le nombre de buts inscrits au total.

Ma requête actuelle :

<?php
$req = mysql_query("SELECT SUM(stats.stat_B) as buts, stats.player_id FROM stats GROUP BY player_id ORDER BY buts DESC limit 5");
?>

J'affiche mes résultats de cette manière (sans l'html dans mon exemple pour simplifier)

<?php while($reponse = mysql_fetch_array($req)){ ?>
<?php echo $reponse['player_id'].' : '.$reponse['buts'].'<br>';?>
<?php } ?>

Mais mon résultat bah c'est le player_id et son total de buts, toutes saisons confondues.

Idéalement j'aimerais afficher les 5 meilleurs buteurs pour la saison en cours avec leur nom et leur total de buts, mais jignore comment joindre ces tables là. J'ai essayer de faire un truc du style WHERE players.player_id LIKE stats.player_id mais ça ne fonctionne pas.

Quelqu'un a-t-il une idée ?
waterjetmedia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2007, 13h17   #2
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Hello,

Ah ben je gère également un systeme pour des championnats de foot et je suis en plein dedans.. J'ai reussi a faire la meme chose, par saison, par journées et par club tout confondu... Tu peux jeter un oeuil au systeme dans ma signature si cela te tente, avec nottament mon site de démo...

Mais ce n'est pas ce qui va résoudre ton probleme je te l'accorde...

Il faut que tu restreignes sur la saison en cours dans la requete..
Personnellement je tenterais ceci avec tes tables :

Code :
1
2
3
4
5
 
 
$sql = "SELECT SUM(stats.buts) as buts, stats.player_id FROM stats
JOIN calendrier ON stats.calendrier_id = calendrier.calendrier_id AND calendrier.saison_id = ".$masaison."
GROUP BY player_id ORDER BY buts DESC limit 5"
Pour la jointure, il faut que "rentres" une table dans la requete, si tu souhaites avoir accès au champ de cette table.
La syntaxe en gros, c'est :
JOIN nomdematable ON champderequeteconnu = champdemanouvelletable

Si je reprends ta requete, et que je veuille rajouter l'accès a des champs de la table player et saison, voici comment faire :

Code :
1
2
3
4
5
6
7
 
 
$sql = "SELECT SUM(stats.buts) as buts, saison.saison_name, stats.player_id, player_lastname, player_firstname FROM stats
JOIN players ON stats.player_id = player.player_id
JOIN calendrier ON stats.calendrier_id = calendrier.calendrier_id AND calendrier.saison_id = ".$masaison."
JOIN saison ON calendrier.saison_id = saison.saison_id
GROUP BY player_id ORDER BY buts DESC limit 5"
Les jointures cela parait compliqué, mais en fait il y a une logique simple a respecter. Il faut ecrire, je veux joindre la table X et les champs communs au rattachement sont.

Mais bon encore une fois, il y a tout ce dont on a besoin sur developpez.com
Cours sur les jointures SQL

@+
cadou
__________________
PHP Competition System
Script de gestion de coupes et championnats
http://phpcompet.free.fr

Mon jeu de foot
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h10.


 
 
 
 
Partenaires

Hébergement Web