PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 21-11-2011 12:06:41

lili
Membre
Inscription : 21-11-2011
Messages : 3

boucle et stat

Bonjour,
Une saisie par formulaire alimente 1 table (nom_activites --> id_titre, titre, activité, mois, annee) qui stocke les demandes des enfants.

J'obtiens

        Livre    Jeu    Vidéo

Janvier        45    62    73
Février        81    54    67

Décembre    0    0    0

avec une boucle sur les mois + 3 requêtes du type:

$nb_jeu= mysql_query("SELECT COUNT(titre) AS nbre_entrees FROM mom_activites WHERE annee=$an AND mois='".$tab_mois[$i]."' AND activité= 'jeu'");

$qj = mysql_fetch_array($nb_jeu);

La même chose pour nb_livre puis nb_video.

Je pense qu'il est possible d'obtenir le même résultat en 1 seule requête,
mais je sèche…
Merci pour votre aide.

Hors ligne

#2 21-11-2011 13:59:22

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : boucle et stat

Saluton,

lili a écrit :

Je pense qu'il est possible d'obtenir le même résultat en 1 seule requête,
mais je sèche…

Et bien, tu penses mal, ma chère lili.
Ceci dit, je t'engage à lire ce mien article.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 21-11-2011 14:28:23

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : boucle et stat

Bonjour,

Je ne suis pas tout à fait du même avis que MK.
En fait cela dépends de deux choses.
1) Soit tu cherches à obtenir les résultats dans un contexte relationnel et donc réexploitables dans une autre requête sans modification des données obtenues initialement, et là je te dis, Cf le lien de MK.
2) Soit ton but c'est d'obtenir l'ensemble des informations recherchées en une seule requête. Et dans le contexte particulier de ce que tu cherches à faire, je te répondrais OUI.
Mais il y a plusieurs contraintes pour que cela soit envisageable.
a) Il te faut une base de données normalisée correctement de manière à rendre une telle requête possible. Dans ton cas ça à l'air d'être le cas.
b) Il te faudra choisir et determiner à l'avance les types d'activités dont tu souhaites récupérer les informations (pas de dynamique possible sans PHP ici et cela rejoint le lien de MK).
c) Il y a cependant un inconvénient: Il te faudra extraire et traiter les données obtenues par ta requête en PHP avant de pouvoir les afficher.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#4 21-11-2011 15:45:34

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : boucle et stat


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 21-11-2011 16:05:59

lili
Membre
Inscription : 21-11-2011
Messages : 3

Re : boucle et stat

Jc : c'est cela, j'essaie d' obtenir l'ensemble des résultats en 1 requête.

MK : je me penche sur les infos au bout des liens.

Merci à vous 2.

Hors ligne

#6 21-11-2011 18:58:24

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : boucle et stat

PS: Cela aurait été plus pratique de mettre par ex un timestamp avec un defaut current timestamp lors de la création de tes enregistrements. Ainsi sur un seul champ tu peux en déduire, le mois, l'année, le jour, l'heure ou encore la minute, ou seconde à laquelle cela a été saisie. Cela complique de définir un champ pour chaque. L'intérêt de faire comme tu as fais, (dans ton cas ce n'est pas le cas) c'est lorsque tu n'as besoin que de l'infos mois par exemple, de réduire l'espace mémoire de stockage en ne choisissant pas DATETIME ou TIMESTAMP qui est plus important.

Le champs mois est défini avec le type MONTH et année avec le type YEAR?

++

Dernière modification par Jc (21-11-2011 19:02:41)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 21-11-2011 20:23:30

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : boucle et stat

L'idée est là


SELECT annee, GROUP_CONCAT(CAST(t1.nbre_entrees AS CHAR)separator ',') as livres, GROUP_CONCAT(CAST(t2.nbre_entrees AS CHAR)separator ',') as jeu,
   GROUP_CONCAT(CAST(t3.nbre_entrees AS CHAR)separator ',') as video
FROM nom_activites AS t
LEFT JOIN
     (SELECT annee, COUNT(titre) AS nbre_entrees, mois
      FROM mom_activites GROUP BY mois HAVING activité= 'livre' ORDER BY mois) as t1 ON t.annee=t1.annee
LEFT JOIN
     (SELECT annee, COUNT(titre) AS nbre_entrees, mois
      FROM mom_activites GROUP BY mois HAVING activité= 'jeu' ORDER BY mois) as t2 ON t.annee=t2.annee
LEFT JOIN
     (SELECT annee, COUNT(titre) AS nbre_entrees, mois
      FROM mom_activites GROUP BY mois HAVING activité= 'video' ORDER BY mois) as t3 ON t.annee=t3.annee
WHERE t.annee=2011
 

Alors c'est la première fois que je fais ce genre d'exercice sur une auto equijointure^^ donc je garantie rien.
Que l'on soit bien d'accord, le but est de rappatrier les données pas de faire des stats avec en MySQL (cf liens de MK).

Attention toutefois, MySQL risque de te demander de préciser la collation selon ton contexte d'exploitation, ce qui sera a faire au sein de la commande GROUP_CONCAT (cf documentation MySQL).
J'ai considéré également un champ mois au format numérique. Si cela n'est pas le cas, un DATE_FORMAT devrait suffire.
Ensuite pour récupérer le tout en php, restera à faire un explode sur les champs puis une boucle pour afficher tout ceci.

Petit conseil : pour cette requête indexe l'annee et le mois^^.
++

Dernière modification par Jc (21-11-2011 21:16:21)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#8 21-11-2011 21:41:13

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : boucle et stat

Note: Il est même envisageable de raccourcir la requête en rajoutant un niveau de dérivation et de classer les activités par ordre alphabétique et de faire un regroupement par activité...


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 22-11-2011 18:45:09

lili
Membre
Inscription : 21-11-2011
Messages : 3

Re : boucle et stat

Waow, j'ai de quoi plancher!
Merci.

J'étudie tout ça de près dès que la vie associative me laisse 1 journée de libre.
bonne soirée.

Hors ligne

Pied de page des forums