Aller au contenu

Tri Mysql sur une date


francoisch

Sujets conseillés

Bonjour

Dabord, jécris en Php dans une base Mysql quelques informations, dont la date :

$date=date("d/m/Y h:i:s");

:

Ensuite, je lis ces informations avec :

$requete = "SELECT * FROM compteur ORDER BY repertoire, page, date";

:

Mon problème : le tri sur la date présente mal puisquil ne prend pas lannée puis le mois puis le jour mais la date entière comme si elle était un nombre unique.

Comment faire pour que le tri sur la date soit correct ?

Par avance merci de votre aide.

Francois

Lien vers le commentaire
Partager sur d’autres sites

Quel est le type de champ qui reçoit ta date dans ta table mysql ?

Si tu as mis varchar il tri suivant un ordre "alphabétique"

Il faudrait transformer ta date php pour qu'elle puisse être entrer dans un champ de type DATE ou DATETIME ainsi tu pourra utiliser toutes les fonctionnalitées que t'offre le SGBD sur les dates et notamment le tri.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

bonjour Kent et merci de ta réponse.

Oui, c'est vrai que j'avais déclaré cette colonne en VarChar et le résultat du tri apparaît comme logique; il faut donc que je modifie la définition de cette colonne.

Mais il faut aussi que j'écrive qqechose qui puisse copier mes qqes centaines de lignes actuelles avec le nouveau format de colonne.

Aïe; merci encore.

Francois

Modifié par francoisch
Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Hum, ce que tu proposes est intéressant.

Je vais essayer ça dès que je pourrais et je te tiendrai au courant.

Merci de ton aide.

F

----------------------------------------------------------------

J'ai créé une colonne supplémentaire: date1

J'ai exécuté: Update compteur set date1 = CAST(date AS DATETIME)

Pour te montrer juste le contenu des deux colonnes sur un seul rang: 28/04/2008 10:21:54 0000-00-00 00:00:00

La première colonne a tjs date et heure en format VarChar (normal); la 2e colonne est en format Dtatetime mais n'est pas valorisée.

J'ai raté qqechose?

Par avance merci de ton aide.

Francois

Modifié par francoisch
Lien vers le commentaire
Partager sur d’autres sites

Bonjour Francois,

pour faire très simple et éviter de refaire tes tables tu peux bien volontier utiliser varchar, il te suffit d'encoder ta date avant son entrée dans la base de données avec la fonction mktime();

ex:

$date_feuille = date("d/m/Y");

$arrdate = explode ("/", $date_feuille);

$cdate = mktime ( 0, 0, 0, $arrdate[1], $arrdate[0], $arrdate[2] );

=> tu obtiens un résultat : 1211407200 qui passera parfaitement dans ta table.

ensuite pour l'affichage de cette date tu fais l'inversement.

=> echo date("d/m/Y", $cdate); (par exemple)

Attention, certains développeur te diront que l'utilisation de mktime() n'est valable que pour une durée déterminée...

Mais bon tu as jusqu'en 2032 donc tu as de la marge :)

ASC.

Lien vers le commentaire
Partager sur d’autres sites

bonjour ASC et merci de ta réponse.

Si je la comprend bien, ça me sera utile pour les prochains enregistrements.

Par contre, ça ne me permet pas de récupérer les anciens enregistrements qui restent tjs à leur format hybride.

Au final, je vais peut-être ecrire un peu de Php pour convertir l'existant et modifier ma routine d'écriture pour me mettre à un format DateTime.

Merci encore de ton aide.

Francois

Lien vers le commentaire
Partager sur d’autres sites

Pour les anciens fichiers tout dépend du formatage... est ce que tes pages ont toujours le meme gabarit et la meme disposition ?

Si oui tu peux utiliser la fonction file_get_contents() comme je te le disais et ensuite user des expressions réguliere pour en sortir du contenu...

Ca risque de prendre un peu de temps au début mais tu pourrais sortir une fonction qui te permettra de récuperer le contenu pour 1 ou 500 000 pages...

ASC.

Lien vers le commentaire
Partager sur d’autres sites

Update matable set mon_champs_2 = CAST(mon_champs_1 AS DATETIME)

Créer une nouvelle colonne temporaire 'mon_champs_2' au format datetime et exécute la requête de mise à jour...

Et pour les nouveaux enregistrements, fait comme te l'a dit ASC :)

Lien vers le commentaire
Partager sur d’autres sites

bonjour et merci Portekoi de ta réponse.

Je me trompe ou bien ce que tu proposes est ce que j'explique avoir fait dans la deuxième partie de mon Post du 20 Mai, 19h58.

Si c'est ça, j'expliquais que le résultat n'était pas positif; sinon, j'aurais besoin d'une explication supplémentaire.

Merci par avance.

Francois

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...