Page 1 sur 1
Faire la somme de plusieurs enregistrements d'une table...
Posté : 13 févr. 2007, 11:30
par Spylberg
Bonjour a tous.
Bon mon titre n'est pas evident mais ça n'est pas evident a expliquer...! :S
Voilà, j'ai une table qui se compose ainsi (ce sont des données de visite):
agence, dpt, janvier, fevrier, mars, avril...etc (dpt pour 'departement')
Les données enregistrées sont a peu près ainsi :
angers, 49, 12, 14, 8...
cholet, 49, 21, 45, 84...
nantes, 44, 23, 84, 5...
ancenis, 44, 21, 45, 6...
rennes, 35, 41, 21, 74...etc
Je souhaiterais pouvoir afficher une somme (addition) en groupant par departement et par mois.
Par exemple la somme des visites sur le departement 49 au mois de fevrier.
Le département et le mois sont passés en variable, $dpt et $mois...
Je me prend le ch... depuis un moment mais je n'abouti a rien.....
Avez vous des solutions....?
D'avance merci de vos réponses éclairées !!!
Posté : 13 févr. 2007, 13:21
par ouckileou
Petit problème de conception évident. Lorsque tu répètes des infos dans une table (ici une colonne pour chaque mois), tu peux tout de suite te dire qu'il y a un problème.
Voici une solution plus classique :
Code : Tout sélectionner
Agence
--------
id_agence
nom_agence
dpt
Mois
-----
id_mois
libelle_mois
Visites
-------
id_visite
id_agence
date_visite
Ce qui te permettrait de pouvoir récupérer les infos plus facilement, faire des tris etc
Un truc dans le genre :
Code : Tout sélectionner
SELECT a.id_agence, a.nom_agence, COUNT(id_visite)
FROM agences AS a
INNER JOIN visites AS v ON a.id_agence = v.id_agence
GROUP BY a.id_agence, MONTH(v.date_visite);
Là pour faire des stats et tout, c'est quand même pas pratique... généralement on ne stocke pas de données calculées. On stocke plutôt une ligne avec la date, plutôt que directement le compte de visites par mois. Comment tu feras si tu veux un compte par semaine un jour ?
Pour ton cas, peut-être ceci marcherait non ?
Code : Tout sélectionner
SELECT dpt, SUM(janvier), SUM(février)
FROM table
GROUP BY dpt
Posté : 13 févr. 2007, 17:28
par Spylberg
Salut et merci de cette réponse précise !
Je n'ai pas encore testé ta requete :
Code : Tout sélectionner
SELECT dpt, SUM(janvier), SUM(février)
FROM table
GROUP BY dpt
Par contre cela m'interesse si tu as des infos, des liens ou un debut de réponse quand à l'enregistrement puis la consultation de stats plus précises par semaine comme tu l'évoques (en Php/SQL)
D'avance merci.
Posté : 13 févr. 2007, 18:14
par Spylberg
J'ai fait ainsi et ça ne fonctionne pas....
Code : Tout sélectionner
// Requete
$sqldpt = 'SELECT dpt, SUM($mois) AS somme FROM table WHERE dpt = $dpt GROUP BY $mois';
// Execute la requete
$exe_sqldpt = mysql_query($sqldpt) or die ('Erreur SQL : '.$sqldpt.'<br />'.mysql_error());
// enregistre dans $Data
$datadpt = mysql_fetch_assoc($exe_sqldpt);
$somme = $datadpt['somme'];
Et mon echo $somme me renvoi le 1er enregistrement mais pas la somme....
Posté : 13 févr. 2007, 18:32
par ouckileou
le GROUP BY regroupe des lignes, pas des colonnes.
Et pourquoi veux-tu faire un GROUP BY mois, alors que tu as déjà une somme par mois (un mois par colonne) ??
Posté : 13 févr. 2007, 18:39
par ouckileou
Tu veux :
la somme des visites : SUM(visites)
pour chaque mois : déjà fait, chaque total pour un mois est dans une colonne
pour chaque agence : GROUP BY agence
Pour des infos sur la modélisation de table, chercher dans le forum "MERISE" par exemple, ou sur le net. Il y a de bons cours UML ou MERISE sur
www.developpez.com
Posté : 13 févr. 2007, 18:48
par Spylberg
en fait ce que je veux c'est la somme des visites pour plusieurs agences selon le département...
Par exemple, la somme des visites des 3 agences du département 49...
C'est la dessus que je bloque...
Posté : 13 févr. 2007, 18:51
par ouckileou
Je t'ai détaillé les étapes dans mon post précédent
Si tu n'arrives pas, fais par étape : récupère d'abord la somme de toutes les visites pour chaque mois, tout département confondu.