[resolu] Question sur Order by avec une date en francais

Question sur Order by avec une date en francais [resolu] - PHP - Programmation

Marsh Posté le 07-01-2011 à 10:19:36    

Hello à tous,
 
j'ai un soucis, je souhaite trier une liste par la date avec un order by. Jusque la, pas de soucis. Sauf que la date ,c'est moi qui l'ai inséré à la mano sous la forme francaise 01-01-2011 ...
 
Donc quand je trie, ça me donne 01-01-2011 > 02-10-2002 > 03-08-2004 etc...
 
Je suis entrain de chercher, mais si vous avez une piste car pour l'instant je n'ai rien trouver de concluant à part peut être timestamp, mais je ne sais pas si je suis sur la bonne piste.
 
Merci d'avance.


Message édité par fscalda le 07-01-2011 à 11:34:30
Reply

Marsh Posté le 07-01-2011 à 10:19:36   

Reply

Marsh Posté le 07-01-2011 à 10:35:24    

Désolé d'enfoncer les portes ouvertes mais si tu utilises un champ avec une date, il faut mettre un type DATE.
 
Et tu n'auras aucun problème de tri


Message édité par smaragdus le 07-01-2011 à 10:35:41
Reply

Marsh Posté le 07-01-2011 à 10:37:42    

Deux solutions :
 
Soit convertir la colonnne du tri dans la requête, soit faire un order by sur la sous-chaine de l'année, sur la sous-chaine du mois, et sur la sous-chaine du jour.
 
Avec quelle base de données ?
 
En Oracle on fait cela avec to_date() pour la première solution, ou avec des substr() pour la deuxième solution.
Il y a des fonctions équivalente pour les autres bases de données.

Reply

Marsh Posté le 07-01-2011 à 10:38:08    

Et si c'est une chaine, trie sur substr(date,7,4)+substr(date,4,2)+left(date,2) ou fonction de ce genre si ça existe.
 
Mais c'est quand même super moche :lol:

Reply

Marsh Posté le 07-01-2011 à 10:38:21    

Tu vas te faire scalper :)
 
On ne met jamais un champs où l'on doit faire des opérations en varchar dans une base de données. C'est en faisant une requête que tu dois changer le format de la date.
 
Maintenant, essaye de faire ça si c'est du MySQL... (mais c'est une hérésie)
 
Select champs1, champs2, STR_TO_DATE(champs_date,'%d-%m-%Y') as Vrai_Champs_Date
FROM taTable
ORDER BY Vrai_Champs_Date


Message édité par antac le 07-01-2011 à 10:40:30
Reply

Marsh Posté le 07-01-2011 à 10:39:24    

1/ C'est une question sql
2/ faire un champs de type DATE, la remplir avec une réécriture correcte de la date pour chaque tuple. Et utiliser le champs nouvellement créer pour ton ORDER BY.


Message édité par erulio le 07-01-2011 à 10:39:58
Reply

Marsh Posté le 07-01-2011 à 10:41:40    

Ne donnez pas des solutions d'hérétiques, la seule solution c'est un type DATE :o

Reply

Marsh Posté le 07-01-2011 à 10:44:59    

smaragdus a écrit :

Ne donnez pas des solutions d'hérétiques, la seule solution c'est un type DATE :o


 
Certes mais c'est mieux que de trier sur des substrings ;)
Puis ça lui donne une piste pour créer une colonne de type date et de faire l'update sur un select


Message édité par antac le 07-01-2011 à 10:45:32
Reply

Marsh Posté le 07-01-2011 à 11:15:29    

Hello, merci à tous pour ces pistes.
 
Effectivement la base est en SQL, et malheureusement pour moi, j'aurais du rentrer la date de façon normale et travailler dessus ensuite.
 
Je vais voir si je peux faire une requete pour remettre mes dates dans le bon sens et travailler ensuite sur l'affichage.

Reply

Marsh Posté le 07-01-2011 à 11:17:38    

Crée une colonne "Vrai_Champs_Date" dans ta table "taTable"
Puis  
UPDATE taTable
SET Vrai_Champs_Date=STR_TO_DATE(champs_date,'%d-%m-%Y')
 
Puis tu supprimes ton champs date initial et tu renommes "Vrai_Champs_Date"
 
Enjoy()

Reply

Marsh Posté le 07-01-2011 à 11:17:38   

Reply

Marsh Posté le 07-01-2011 à 11:19:14    

Oui si la base est à toi modifie-là.

Reply

Marsh Posté le 07-01-2011 à 11:29:52    

Génial, ça marche. Je me retrouve avec un vrai champ date complété comme il se doit.
 
Merci  :bounce:  :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed