problème de jointure de table avec SUM et GROUP BY
14 messages
• Page 1 sur 1
- waterjetmedia
- Nouveau WRInaute

- Messages: 9
- Inscription: 20 Sep 2007
problème de 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 ?
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 ?
-

erestrebian - WRInaute occasionnel

- Messages: 472
- Inscription: 15 Juin 2007
- Code: Tout sélectionner
$sql="select p.player_lastname, p.player_firstname, count(buts)
from players p, calendrier c, saison s, stats st
where p.player_id=st.player_id
and st.calendrier_id=c.calendrier_id
and c.saison_id=s.saison_id
and saison_start<".time()."
and saison_finisth>".time()."
order by count(buts) DESC
limit 0,5";
je pense que ça devrait ressemble à quelque chose comme ça mais bon je suis pas vraiment sûr de ce que contient exactement tes champs...
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Bonjour
je te laisse écrire les SELECT
peut être ?
ps : en passant la requete dans une variable, tu peux ensuite facilement l'afficher via un ECHO et la reprendre directement dans ton phpmyadmin qui te donnera plus d'infos sur ce qui va pas.
Me connaissant, m'étonnerait que ma proposition fonctionne mais peut-être te donnera-t-elle une piste ?
Sinon, je suis ouvert aux échanges de liens football avec mon www
Bon ok je
EDIT : argh grillé, mais nos deux versions se rejoignent
RE-EDIT : la proposition de estrebian est meilleure, elle va chercher le nom des buteurs.
je te laisse écrire les SELECT
- Code: Tout sélectionner
$query="SELECT SUM(stats.stat_B) as buts, ... WHERE `players.player_id`=`stats.player_id` AND
`stats.calendrier_id`=`calendrier.calendrier_id` AND
`calendrier.saison_id`=`saison.saison_id` AND `saison.saison_id`='".$variable_identifiant_saison."' ORDER BY buts DESC LIMIT 0,5";
$req = mysql_query($query);
peut être ?
ps : en passant la requete dans une variable, tu peux ensuite facilement l'afficher via un ECHO et la reprendre directement dans ton phpmyadmin qui te donnera plus d'infos sur ce qui va pas.
Me connaissant, m'étonnerait que ma proposition fonctionne mais peut-être te donnera-t-elle une piste ?
Sinon, je suis ouvert aux échanges de liens football avec mon www
Bon ok je
EDIT : argh grillé, mais nos deux versions se rejoignent
RE-EDIT : la proposition de estrebian est meilleure, elle va chercher le nom des buteurs.
Dernière édition par nickargall le Jeu Sep 20, 2007 11:44, édité 1 fois.
- waterjetmedia
- Nouveau WRInaute

- Messages: 9
- Inscription: 20 Sep 2007
erestrebian a écrit:
- Code: Tout sélectionner
$sql="select p.player_lastname, p.player_firstname, count(buts)
from players p, calendrier c, saison s, stats st
where p.player_id=st.player_id
and st.calendrier_id=c.calendrier_id
and c.saison_id=s.saison_id
and saison_start<".time()."
and saison_finisth>".time()."
order by count(buts) DESC
limit 0,5";
je pense que ça devrait ressemble à quelque chose comme ça mais bon je suis pas vraiment sûr de ce que contient exactement tes champs...
count(buts) ? pas SUM(buts) ?
- waterjetmedia
- Nouveau WRInaute

- Messages: 9
- Inscription: 20 Sep 2007
J'ai essayé la chose suivante et à présent, plus rien ne s'affiche
j'ai essayé juste de joindre stats et players comme table. en fait le champ pour mes buts c'est "stat_B" et non "buts"
<?php
$req = mysql_query("SELECT players.player_lastname,
players.player_id,
stats.player_id,
SUM(stat_B) as buts
FROM stats, players
WHERE stats.player_id = player.player_id
GROUP BY player_id
ORDER BY buts DESC
limit 5");
?>
j'ai essayé juste de joindre stats et players comme table. en fait le champ pour mes buts c'est "stat_B" et non "buts"
<?php
$req = mysql_query("SELECT players.player_lastname,
players.player_id,
stats.player_id,
SUM(stat_B) as buts
FROM stats, players
WHERE stats.player_id = player.player_id
GROUP BY player_id
ORDER BY buts DESC
limit 5");
?>
- waterjetmedia
- Nouveau WRInaute

- Messages: 9
- Inscription: 20 Sep 2007
je viens d'essayer la proposition de eestrebian que je remercie, j'ai toujours rien qui s'affiche
je vais aller voir pourquoi... et je vous tiens au jus dans les min qui suivent
un immense merci à vous deux
je vais aller voir pourquoi... et je vous tiens au jus dans les min qui suivent
un immense merci à vous deux
- chtipepere
- WRInaute occasionnel

- Messages: 496
- Inscription: 8 Jan 2004
Exécute tes requêtes dans phpmyadmin, et pas par php, tu gagneras du temps pour debugger.
Pour la jointure (si ta version de mysql est supérieure à 3), utilises plutôt JOIN (INNER, LEFT ou RIGHT selon tes besoins).
Explications ici.
Bon courage
Pour la jointure (si ta version de mysql est supérieure à 3), utilises plutôt JOIN (INNER, LEFT ou RIGHT selon tes besoins).
Explications ici.
Bon courage
- waterjetmedia
- Nouveau WRInaute

- Messages: 9
- Inscription: 20 Sep 2007
ok je vais lire les règles de join que tu m'as proposé et checker avec phpmyadmin
et ensuite... on verra
et ensuite... on verra
-

erestrebian - WRInaute occasionnel

- Messages: 472
- Inscription: 15 Juin 2007
c'est quoi stats_B dans ta table?
sinon c'est bien un sum et pas un count qu'il faut faire...
sinon c'est bien un sum et pas un count qu'il faut faire...
- jamalofski
- WRInaute discret

- Messages: 219
- Inscription: 3 Mar 2007
essaye ca :
- Code: Tout sélectionner
SELECT players.player_lastname, players.player_firstname, sum(stats.buts) as totalButs
FROM stats, players
WHERE stats.player_id = player.player_id
GROUP BY players.player_lastname, players.player_firstname
ORDER BY totalButs DESC
limit 5
- waterjetmedia
- Nouveau WRInaute

- Messages: 9
- Inscription: 20 Sep 2007
hello,
alors ça a fonctionné de la manière suivante :
SELECT * , SUM( stat_B ) AS buts
FROM stats, players, schedule, seasons
WHERE stats.player_id LIKE players.player_id
AND stats.schedule_id LIKE schedule.schedule_id
AND seasons.season_id LIKE schedule.season_id
AND seasons.season_current LIKE '1'
GROUP BY stats.player_id
ORDER BY buts DESC
LIMIT 5
un immense merci à vous tous. Super classe ce forum que je ne connaissais pas.
alors ça a fonctionné de la manière suivante :
SELECT * , SUM( stat_B ) AS buts
FROM stats, players, schedule, seasons
WHERE stats.player_id LIKE players.player_id
AND stats.schedule_id LIKE schedule.schedule_id
AND seasons.season_id LIKE schedule.season_id
AND seasons.season_current LIKE '1'
GROUP BY stats.player_id
ORDER BY buts DESC
LIMIT 5
un immense merci à vous tous. Super classe ce forum que je ne connaissais pas.
-

nickargall - WRInaute accro

- Messages: 6468
- Inscription: 13 Juin 2005
Tant mieux. Euh, pouruqoi "LIKE" et pas "=" dans tes requêtes ? A mon avis demander de "=" au lieu des "LIKE" marchera aussi bien et demandera moins de ressources à la base SQL
-

erestrebian - WRInaute occasionnel

- Messages: 472
- Inscription: 15 Juin 2007
si tu n'as pas besoin de tous les champs, sélectionne seulement sur ceux qui t'intéressent (nom, prénom...)
- waterjetmedia
- Nouveau WRInaute

- Messages: 9
- Inscription: 20 Sep 2007
ok, je vais essayer cela pour rendre plus léger ma requête.
merci
merci
14 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- SUM et GROUP BY
- Une jointure à trois table
- Jointure sql problème inner join
- JOINTURE SQL: problème de doublon
- Problème choix syntaxe jointure
- problème de jointure mysql : je m'en sors pas !!
- Problème de jointure entre deux tables requête SQL
- Probleme table
- [sql] Tri d'une table selon un champ dans une autre table
- [Résolu] Problème Div et Table
- Les pays gérés par la Google Toolbar 2.0 - 26-06-2003
- Du nouveau du côté des laboratoires de Google : Google Labs - 20-05-2002
- Accord entre Ask Jeeves et Google - 18-07-2002
- Yahoo Slurp et autres robots d'indexation de Yahoo - 07-03-2004
- Services et outils de Yahoo! Search - 17-02-2004
- Parts de marché des moteurs aux USA (Octobre 2006) - 04-12-2006
- Les visiteurs de WRI apprécient Firefox - 24-03-2005
- Google Calendar API - 20-04-2006
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités
