PHP|Débutant :: Forums

Advertisement

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

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

#1 07-01-2010 16:34:34

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Tri php de date Sql type Datetime

hello ! smile

j'ai actuellement en tete de faire un système de statistique, et ca marche plutot bien tongue, cependant j'aimerai faire évoluer le systeme en affichant au mois ou a l'année.

J'ai une Bdd contenant des datetime de chaque heure ( a 15 min pres ) (exemple : 2009-12-29 01:17:44), et je les extraits avec un extract(month FROM date).
( j'ai vue aussi que l'on pouvait utiliser month(), il y a une préférence a vos yeux ? )

Le probleme c'est que je n'ai pas su crée un code pertinant me permetant d'additioner toute les donnée de toute les heures pour un jour ( si on veut voir un janvier par exemple ), ou pareille pour la vue en année.

je sais bien recupéré mes données mais je ne sais absolument pas comment les trier...

une solution vous vient a l'esprit ?

Merci !

Hors ligne

#2 07-01-2010 17:11:20

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Tri php de date Sql type Datetime

Je ne suis pas sûr de tout comprendre mais tentons. big_smile

Tu as une requête qui fait des calculs et patati et patata mais le résultat n'est pas trié. Et si tu mettais dans cette requête un ORDER BY timestamp ?
Il te ferrai toujours les mêmes calculs mais en partant des enregistrements triés, ce qui te donnera un solution triée.

Cela rentre-t-il dans ton problème ?

Hors ligne

#3 07-01-2010 17:35:31

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Re : Tri php de date Sql type Datetime

hello smile

merci pour cette reponse smile mais nan tongue

Je te fais un topo :

il sagit de statistique sur la présence de joueur sur un jeu en ligne donc dans ma base j'ai : femme homme autre ( et date smile )
l'affichage de base ( qui marche actuellement ) affiche le nombre de joueur sur une journée pour chaque heures ( 00h - 23h ).

ce que je veux c'est afficher dans le mode Mois : les jours du mois.
et en mode année : 12 mois.

Mon soucis actuellement, c'est que une fois la requete sql passé j'obtient effectivement toute les datetime sur le mois ou l'année voulue, mais il ne faut pas oublier que chaque jour est composer de 24 enregistrement ( ou moin en cas de panne de serveur ).

en bref il me faut additionner toutes les heure ensemble pour chaque jours pour le mode mois, et les tout les jour d'un mois ensemble pour le mode année.

merci,

Jiinn.

Hors ligne

#4 08-01-2010 10:41:17

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Tri php de date Sql type Datetime

Ah oui je commence à voir le bordel...
Malheureusement rien qui ne me vienne à l'esprit pour te dépanner. neutral

Hors ligne

#5 08-01-2010 11:07:37

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Re : Tri php de date Sql type Datetime

Merci tout de meme smile

je vais retenter plus tard un bout de code, j'etais pas du tout satisfait alors j'ai tout effacer ^_^;

je le posterais plus tard.

Jiinn

Hors ligne

#6 08-01-2010 11:47:10

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

Re : Tri php de date Sql type Datetime

Saluton,
Attention à ne pas raisonner uniquement sur MONTH() mais aussi sur YEAR(), car deux datetimes peuvent avoir la même valeur de MONTH() mais des YEAR() différents.
Même chose pour DAY(), au demeurant.


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

#7 08-01-2010 14:39:38

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Re : Tri php de date Sql type Datetime

Oui pas de problème sur ce coté la c'est histoire d expliquer la manœuvre utilisé smile.

Merci

Hors ligne

#8 08-01-2010 22:56:57

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Re : Tri php de date Sql type Datetime

Hello !

Bon ben j'ai tenter ceci mais ca ne passe pas ...
pourtant ca doit me retourner le nombre de femme pour chaque jour et s'additionner, puis l'afficher.
( j'ai fait que les femmes pour un simple test et sur un affichage au mois ( vue des jours avec addition des joueurs )

voici la requete sql : $sql = "SELECT * FROM table WHERE YEAR(date)  = $postYear and  MONTH(date) = $postMonth";


if($postMode == 2){

//Request          
$query = mysql_query($sql);

//Add Data
 while($array = mysql_fetch_array($query))
{

// Calcule du nombre de jour dans un mois
$dateDayNumber = date( "j", mktime(0, 0, 0, date("m", strtotime($array['date'])) + 1, 1, $postYear) - 1 );
// Retourne le jour en chiffre
$dateDay = date("d", strtotime($array['date']));

// Tableau[jour en chiffre] += nombre de femme dans la bdd sur cette heure.
$tabWomen[$dateDay] += $array['femme'];
}

for ($i = 1; $i <= $dateDayNumber; $i++) {
     // spécifique a lib de stat, remplace par exemple un echo $tabWomen[$i];
     $data_all->add_data_tip( $tabWomen[$i], "test");
   }
   
}
 

Jiinn

Dernière modification par Jiinn (08-01-2010 22:59:12)

Hors ligne

#9 09-01-2010 12:00:45

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

Re : Tri php de date Sql type Datetime

La solution est évidemment à rechercher en priorité du côté de SQL, en jouant sur la clause GROUP BY (éventuellement WITH ROLLUP), mais, sans la structure exacte des tables, difficile de proposer une solution cohérente.


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

#10 09-01-2010 14:16:32

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Re : Tri php de date Sql type Datetime

Voici la table, j'ai tenter GROUP BY et j'ai un résultat satisfaisant mais incorrecte je travaille dessus.

     


  id          INT(11)              
  DATE          datetime                 
  femme INT(11)                  
  homme INT(11)              
  autre   INT(11)
 

Cette requête devrais fonctionner mais elle ne me renvoie que la première heure sans addition de chaque jour ... :


$sql = "SELECT *,  SUM(femme) FROM stat_player WHERE YEAR(date)  = $postYear and  MONTH(date) = $postMonth GROUP BY DAY(date)";
 

Dernière modification par Jiinn (09-01-2010 14:34:19)

Hors ligne

#11 10-01-2010 09:08:10

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

Re : Tri php de date Sql type Datetime

Saluton,
Tout d'abord, pourquoi SELECT *, surout sur un GROUP BY, ça n'a vraiment aucun sens.
Rappel : La guerre des étoiles
Ensuite pourquoi trois colonnes pour une seule info ?
Il suffit de convenir d'un code genre 1 pour femme, 2 pour homme et 3 pour autre.
Enfin très mauvais plan de donner un mot réservé SQL (DATE) comme nom à une colonne
Pour connaitre le nombre de femmes

SELECT DAY(horaire) AS jour,
       SUM(IF(sexe=1,1,0))AS femmes
FROM stat_player
WHERE YEAR(horaire) = $postYear
AND  MONTH(horaire) = $postMonth
GROUP BY jour

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

#12 10-01-2010 13:05:26

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Re : Tri php de date Sql type Datetime

Hello,

je ne peux pas utiliser ce type de table : pour today 12h00 > 12 femme 23 homme 6 autre
a moin de faire plusieur enregistrement du style 12h00 12 femme(code 1) 0 , 12h00 23 homme(code 2) ...

Pour afficher un mois par exemple Janvier je ne peux pas non plus utiliser SELECT DAY(time)


sinon je ne savais pas pour le mot réservé, et le dossier sur la guerre des étoiles est instructif , --> je corrige ca *honte*

par contre dans ton exemple je ne comprend pas bien le AS jour et GROUP BY jour ?

Jiinn

Dernière modification par Jiinn (10-01-2010 13:16:33)

Hors ligne

#13 11-01-2010 15:46:45

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

Re : Tri php de date Sql type Datetime

Jiinn a écrit :

je ne peux pas utiliser ce type de table : pour today 12h00 > 12 femme 23 homme 6 autre
a moin de faire plusieur enregistrement du style 12h00 12 femme(code 1) 0 , 12h00 23 homme(code 2) ...

Ce qui serait logique et respecterait les formes normales

Jiinn a écrit :

Pour afficher un mois par exemple Janvier je ne peux pas non plus utiliser SELECT DAY(time)

Rien compris à cette assertion

Jiinn a écrit :

par contre dans ton exemple je ne comprend pas bien le AS jour et GROUP BY jour ?

MySQL autorise l'utilisation des noms d'alias de colonnes dans les clauses GROUP BY et HAVING, ce n'est pas standard (SQL) donc, effectivement, plutôt à éviter.


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

#14 11-01-2010 20:38:50

Jiinn
Membre
Inscription : 06-01-2010
Messages : 22

Re : Tri php de date Sql type Datetime

Merci beaucoup pour tes explications, grace a Group By j'ai pus obtenir le resultat voulu !

Hors ligne

Pied de page des forums