Tri sur une date entière

Eléphanteau du PHP | 19 Messages

12 août 2005, 10:21

Voici mon petit souci :

Je dispose d’une requête qui fait une sélection sur des informations concernant mes clients, et qui ensuite affiche les occurrences retournées sous forme de tableau. Voici ma requête :

Code : Tout sélectionner

$selectInfoClient = ("SELECT NumId, Client, Date FROM Client ORDER BY 3 DESC") ; $reselectInfoClient = odbc_exec($connexion,$ selectInfoClient) or die("Ne peut pas exécuter la requête.") ;
On peut voir que je fais un tri par ordre décroissant sur la date. Seulement, lorsque je fais mon tri, celui ci ne s’effectue que sur le jour de ma date, et pas sur ma date entière. C’est à dire que lorsque je verrais mon tableau, j’aurais sur la première ligne 31/12/2005, puis 31/05/2005, puis 30/10/2005, puis 29/12/2005.

Mes dates seront rangées juste sur le jour, et du coup, je me retrouve avec des mois emmêlés, avec un mois de mai entre un mois d’octobre et de décembre par exemple.

Comment faire pour que mon tri se fasse sur toute la date, et pas seulement sur le jour ?

A savoir que dans ma base, j'ai mis le champ date au format texte.
C'est parce que la vitesse de la lumière est supérieure à celle du son,
Que tant de gens paraissent brillant avant d'avoir l'air con.

Mammouth du PHP | 543 Messages

12 août 2005, 11:14

Il faut que tu convertisses Date dans la requete. Il y a des fonctions pour cela.

@+

Eléphanteau du PHP | 19 Messages

12 août 2005, 11:28

Mmmh...

J'ai bien trouvé la fonction mktime, qui me permettrait de trier mes date par ordre décroissant en fonction du nombre de secondes retournées, mais ça me semble un peu brutal...

D'autant que je ne peux pas utiliser mktime directement dans ma requête de sélection, bien évidemment.

Je me vois mal convertir à chaque fois toutes les dates sous forme de secondes, et les enregistrer dans ma table...
C'est parce que la vitesse de la lumière est supérieure à celle du son,
Que tant de gens paraissent brillant avant d'avoir l'air con.

Mammouth du PHP | 543 Messages

12 août 2005, 11:34

Bah :

Code : Tout sélectionner

$selectInfoClient = ("SELECT NumId, Client, Date FROM Client ORDER BY TO_DATE(Date,'DD/MM/YYYY') DESC") ;

@+

Eléphanteau du PHP | 19 Messages

12 août 2005, 11:42

Mmmh, étrange, il ne me reconnaît pas la fonction TO_DATE. J'ai droit à un joli :
Fonction 'TO_DATE' non définie dans l'expression
Ma requête donne ceci :

Code : Tout sélectionner

$selectInfoClient = ("SELECT NumId, Client, Date FROM Client ORDER BY TO_DATE(Date,'DD/MM/YYYY') DESC") $reselectAstr = odbc_exec($connexion,$selectAstr) or die("Ne peut pas exécuter la requête.") ;
C'est parce que la vitesse de la lumière est supérieure à celle du son,
Que tant de gens paraissent brillant avant d'avoir l'air con.

Mammouth du PHP | 543 Messages

12 août 2005, 11:44

Quel est ton sgbdr ?

Et comme ca ca donne quoi :

Code : Tout sélectionner

$selectInfoClient = ("SELECT NumId, Client, Date,TO_DATE(Date,'DD/MM/YYYY') as Date2 FROM Client ORDER BY Date2 DESC")

@+

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 août 2005, 12:52

il y a une raison à stocker les dates dans un champ texte ?

le format DATE : aaaa-mm-jj est justement pour trier les dates correctement ...

Eléphanteau du PHP | 19 Messages

12 août 2005, 13:31

@Raptor : Non, ça donne toujours la même chose. Visiblement, il ne me reconnaît pas la fonction TO_DATE

@ ouckileou : Moui. J’ai quelque messages d’erreurs qui apparaissent parfois si je laisse mon champ au format date. J’ai eu beau chercher, je ne vois pas d’où ça vient. Et comme ma base de données est TRES conséquente, c’est ingérable autrement. C’est trop instable pour être efficace dans mon cas.
C'est parce que la vitesse de la lumière est supérieure à celle du son,
Que tant de gens paraissent brillant avant d'avoir l'air con.

ViPHP
pjl
ViPHP | 2119 Messages

12 août 2005, 13:37

Et si tu nous disait déjà quel type de base de données tu utilises.

Eléphanteau du PHP | 19 Messages

12 août 2005, 14:13

Aucun problème, mais je préférais ne rien dire de peur de vous effrayer.

J'utilise une base Access... 95...

Désolé, mais bien obligé, ordre de l'employeur... :D

Bon, j'en rajoute, mais toujours est il que c'est sous une base Access 95 que je vais récupérer mes informations.
C'est parce que la vitesse de la lumière est supérieure à celle du son,
Que tant de gens paraissent brillant avant d'avoir l'air con.