IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Jointure de table avec SUM et GROUP BY


Sujet :

PHP & Base de données

Vue hybride

waterjetmedia [SQL] Jointure de table avec... 20/09/2007, 12h24
cadoudal56 Hello, Ah ben je gère... 20/09/2007, 13h17
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1
    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 ?

  2. #2
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Jointure de table avec Interbase
    Par ada_b dans le forum InterBase
    Réponses: 21
    Dernier message: 12/05/2010, 19h52
  2. Probleme avec SUM et GROUP BY de 2 tables [FIREBIRD]
    Par fthdz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/02/2010, 18h22
  3. Requete SQL jointure plusieurs tables
    Par bibicha dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2006, 17h38
  4. [VB6 / SQL SEVER2000] Conseilssur table avec 80 000 enr ?
    Par Tankian dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/08/2004, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo