Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2729 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Complément] Statistiques saison de hockey

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Complément] Statistiques saison de hockey

n°1029517
CHli
Posté le 30-03-2005 à 11:26:39  profilanswer
 

Bonjour et tout d'abord merci à tout ceux qui auraient décidés de m'aider :hello:
 
Je suis entrain de créer quelques pages en PHP et quelques requêtes pour aider un ami et j'avoue que mes connaissances en SQL sont plutôt limitées.
 
Voilà le schéma de la base :
 
http://chli.zapto.org/public/db.png
 
et voilà à quoi j'aimerais arriver en une seule requête :
 
http://www.bruleglace.com/stats/index.php3
 
(Pour chaque joueur, le nombre de matchs auquel il a participé, le nombre de buts qu'il a marqué, le nombre d'assists qu'il a fait et le nombre de minutes de pénalités qu'il a eu tout ça en une saison)
 
 
J'ai fait un LEFT OUTER JOIN pour avoir au moins une fois chaque joueur, j'arrive à avoir le nombre de match auquel à participé un joueur, mais après ça coince. Voilà ma requête (incorrect) :
 
SELECT J.Jou_Nom, J.Jou_Prenom, J.Jou_Numero, COUNT(NM.Jou_IDE) as NB_Matchs, COUNT(B.Jou_IDE) as NB_Buts, SUM(P.Pen_Duree) as NBPenalites FROM (((joueurs as J LEFT OUTER JOIN nm_matchsjoueurs as NM ON J.Jou_ID = NM.Jou_IDE) LEFT OUTER JOIN buts as B ON J.Jou_ID = B.Jou_IDE) LEFT OUTER JOIN penalites as P ON J.Jou_ID = P.Jou_IDE) GROUP BY J.Jou_ID ORDER BY J.Jou_Nom.
 
Ce qui me retourne :
 
http://chli.zapto.org/public/result.png
 
Hors il n'y a qu'une seule pénalité de 15 minutes et non pas 2 pour "Von Allmen Nils". (mais ce n'est pas le seul problème)
 
Vous pouvez consulter/modifier la base à l'aide de l'interface (Firefox only) [... problème résolu ... supprimé pour des raisons de sécurité]
 
(data base sauvegardée vous pouvez y aller lol)
 
Vous pouvez essaier vos requêtes sur :
 
[... problème résolu ... supprimé pour des raisons de sécurité]
 
Merci infiniment à tout ceux qui pourront m'apporter des éléments de réponses. :love:


Message édité par CHli le 08-04-2005 à 11:08:55
mood
Publicité
Posté le 30-03-2005 à 11:26:39  profilanswer
 

n°1030777
CHli
Posté le 31-03-2005 à 10:42:39  profilanswer
 

snif personne :-|

n°1030883
ratibus
Posté le 31-03-2005 à 12:02:38  profilanswer
 

Quelle version de MySQL ?

n°1031242
CHli
Posté le 31-03-2005 à 15:28:02  profilanswer
 

salut ratibus, la version installée est la 4.1.10-nt.
 

n°1031469
Beegee
Posté le 31-03-2005 à 17:04:13  profilanswer
 

Concentre toi sur un problème à la fois.
 
Les pénalités pour commencer ...
 
Donnes-nous le contenu de la table des joueurs et celui de la table des pénalités, et le résultat de la requête suivante :
 

Code :
  1. SELECT J.Jou_Nom,
  2.        J.Jou_Prenom,
  3.        J.Jou_Numero,
  4.        SUM(P.Pen_Duree) as NBPenalites
  5. FROM   joueurs as J
  6. LEFT OUTER JOIN penalites as P ON J.Jou_ID = P.Jou_IDE
  7. GROUP BY J.Jou_ID
  8. ORDER BY J.Jou_Nom;


n°1031625
ratibus
Posté le 31-03-2005 à 19:15:59  profilanswer
 

Code :
  1. SELECT J.Jou_Nom, J.Jou_Prenom, J.Jou_Numero, P.nb_penalites, M.nb_matchs, B.nb_buts
  2. FROM joueurs J
  3. LEFT JOIN
  4. ((
  5. SELECT Jou_IDE, SUM(Pen_Duree) AS nb_penalites
  6. FROM penalites
  7. GROUP BY Jou_IDE
  8. ) AS P) ON J.Jou_IDE=P.Jou_IDE
  9. LEFT JOIN
  10. ((
  11. SELECT Jou_IDE, COUNT(*) AS nb_matchs
  12. FROM nm_matchsjoueurs
  13. GROUP BY Jou_IDE
  14. ) AS M) ON J.Jou_IDE=M.Jou_IDE
  15. LEFT JOIN
  16. ((
  17. SELECT Jou_IDE, COUNT(*) AS nb_buts
  18. FROM buts
  19. GROUP BY Jou_IDE
  20. ) AS B) ON J.Jou_IDE=B.Jou_IDE


 
Si jamais tu dois utiliser une version de MySQL < 4.1, alors ils faut passer par des TEMPORARY TABLE (ça marche très bien ;)).
 
Dis moi si la requete passe (je peux pas tester mais ça doit être ça, aux erreurs de syntaxe près :D)


Message édité par ratibus le 31-03-2005 à 19:26:00
n°1031626
CHli
Posté le 31-03-2005 à 19:19:23  profilanswer
 

merci pour toutes ces réponses je vais tester ça ce soir ! Merci infiniment !

n°1031663
CHli
Posté le 31-03-2005 à 19:59:48  profilanswer
 

Merci infiniment à vous tous !  
 
La query finale est celle-ci :
 

Code :
  1. SELECT Jou.Jou_Nom, Jou.Jou_Prenom, Jou.Jou_Numero, Pen.nb_penalites, Mat.nb_matchs, But.nb_buts
  2. FROM joueurs Jou
  3. LEFT JOIN ((
  4. SELECT Jou_IDE, SUM(Pen_Duree) AS nb_penalites
  5. FROM penalites GROUP BY Jou_IDE) AS Pen)
  6. ON Jou.Jou_ID=Pen.Jou_IDE
  7. LEFT JOIN ((
  8. SELECT Jou_IDE, COUNT(*) AS nb_matchs
  9. FROM nm_matchsjoueurs GROUP BY Jou_IDE) AS Mat)
  10. ON Jou.Jou_ID=Mat.Jou_IDE
  11. LEFT JOIN ((
  12. SELECT Jou_IDE, COUNT(*) AS nb_buts FROM buts GROUP BY Jou_IDE) AS But)
  13. ON Jou.Jou_ID=But.Jou_IDE


 
y avait juste les Jou.Jou_IDE = xxx.Jou_IDE qui jouaient pas. Mais sinon impec !  
 
C'est la fête :)


Message édité par CHli le 31-03-2005 à 20:01:39
n°1031773
EpoK
Let's burn
Posté le 31-03-2005 à 21:19:12  profilanswer
 

il est fait avec quel logiciel ton diagrammae ?

n°1032152
CHli
Posté le 01-04-2005 à 10:02:54  profilanswer
 

http://www.fabforce.net/dbdesigner4/
 
+ les liaisons à la main sous paint... lol (mais c parceque j'ai conçu la base à la main et que j'ai simplement importé par la suite dans DBDesigner en faisant un reverse engineering depuis la base mysql, sinon on peut tout faire avec ce programme.)


Message édité par CHli le 01-04-2005 à 10:08:52
mood
Publicité
Posté le 01-04-2005 à 10:02:54  profilanswer
 

n°1032314
CHli
Posté le 01-04-2005 à 12:23:13  profilanswer
 

Bon c'est pas tout à fait résolu encore en fait :) Et à nouveau je coince...  
 
Dans la query finale on utilise pour les statistiques tous les éléments de la base hors ce que je désire faire c'est utiliser uniquement les informations concernant les matchs s'étant déroulés durant la saison ayant un ID = x.
 
Dans la requête de ratibus (le sauveur) on fait des LEFT JOIN sur la table joueurs afin d'obtenir les différents éléments statistiques que je désire afficher.
 
Quelle syntaxe adopter pour limiter le groupe de résultats aux matchs s'étant disputé durant une saison ayant pour id = n.
 
C'est terrible pour moi ce SQL, je vois les intersections d'ensembles dans ma tête mais je n'arrive pas à les retranscrire en SQL. Va falloir que je me trouve un bon bouquin :)

n°1032391
ratibus
Posté le 01-04-2005 à 13:28:50  profilanswer
 

CHli a écrit :

Bon c'est pas tout à fait résolu encore en fait :) Et à nouveau je coince...  
 
Dans la query finale on utilise pour les statistiques tous les éléments de la base hors ce que je désire faire c'est utiliser uniquement les informations concernant les matchs s'étant déroulés durant la saison ayant un ID = x.
 
Dans la requête de ratibus (le sauveur) on fait des LEFT JOIN sur la table joueurs afin d'obtenir les différents éléments statistiques que je désire afficher.
 
Quelle syntaxe adopter pour limiter le groupe de résultats aux matchs s'étant disputé durant une saison ayant pour id = n.
 
C'est terrible pour moi ce SQL, je vois les intersections d'ensembles dans ma tête mais je n'arrive pas à les retranscrire en SQL. Va falloir que je me trouve un bon bouquin :)

Tu veux toujours tous les joueurs ?

n°1032524
CHli
Posté le 01-04-2005 à 15:23:26  profilanswer
 

Oui, grand maitre SQL.

n°1032549
ratibus
Posté le 01-04-2005 à 15:48:21  profilanswer
 

:D
 

Code :
  1. SELECT J.Jou_Nom, J.Jou_Prenom, J.Jou_Numero, P.nb_penalites, M.nb_matchs, B.nb_buts
  2. FROM joueurs J
  3. LEFT JOIN
  4. ((
  5. SELECT Jou_IDE, SUM(Pen_Duree) AS nb_penalites
  6. FROM penalites
  7. JOIN matchs ON penalites.Mat_IDE=matchs.Mat_ID
  8. WHERE matchs.Sai_IDE=X
  9. GROUP BY Jou_IDE
  10. ) AS P) ON J.Jou_IDE=P.Jou_IDE
  11. LEFT JOIN
  12. ((
  13. SELECT Jou_IDE, COUNT(*) AS nb_matchs
  14. FROM nm_matchsjoueurs
  15. JOIN matchs ON nm_matchsjoueurs.Mat_IDE=matchs.Mat_ID
  16. WHERE matchs.Sai_IDE=X
  17. GROUP BY Jou_IDE
  18. ) AS M) ON J.Jou_IDE=M.Jou_IDE
  19. LEFT JOIN
  20. ((
  21. SELECT Jou_IDE, COUNT(*) AS nb_buts
  22. FROM buts
  23. JOIN matchs ON buts.Mat_IDE=matchs.Mat_ID
  24. WHERE matchs.Sai_IDE=X
  25. GROUP BY Jou_IDE
  26. ) AS B) ON J.Jou_IDE=B.Jou_IDE

n°1032621
CHli
Posté le 01-04-2005 à 16:51:33  profilanswer
 

j'en ai rêvé il l'a fait :)
 
Merci ratibus !

n°1032810
ratibus
Posté le 01-04-2005 à 20:49:21  profilanswer
 

J'espère que tu as compris le principe ;)

n°1032967
CHli
Posté le 02-04-2005 à 01:25:51  profilanswer
 

Je vais m'entrainer... mais une fois la requête formulée je comprend tout à fait son fonctionnement. Encore merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Complément] Statistiques saison de hockey

 

Sujets relatifs
statistiques sur les utilisateurs recentes ???Statistiques Php
outil gratuit de statistiques de sites internet pour webmasters[SGBD] Des statistiques sous SQL Server 2000 ?
Bases d'IA, mathématiques et statistiqueshtaccess et statistiques d'acces
[MySQL] somme, moyenne, et autres statistiques[PHP] Statistiques du serveur en bas de mes pages
Module de statistiques ???Le script de statistiques ezWebStats 3.01 ne log rien
Plus de sujets relatifs à : [Complément] Statistiques saison de hockey


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR