Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/03/2011, 20h18   #1
Invité de passage
 
Nicolas Clave
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Nom : Nicolas Clave

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 4
Points : 4
Par défaut problème ORDER BY et CAST

Bonjour,

Je rencontre un souci avec une de mes requêtes. En fait j’ai une table évènement contenant du texte de la forme jj/mm/yyyy hh :mm.

Je souhaite afficher mes évènements par date du plus récent au plus ancien, j’ai donc fait la requête suivante :
Code :
1
2
3
4
SELECT * 
FROM evenement 
ORDER BY cast(`date` AS DATETIME) DESC 
LIMIT 20;
Le problème est que les dates sont classées du plus ancien au plus récent et bien sûr c’est l’inverse que je veux ! J’ai bien essayé de remplacer DESC par ASC mais rien n'y fait… on dirait que ça n’a aucune influence.

Auriez-vous une idée ? merci de votre aide

PS: BDD sous MYSQL
clave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 13h50   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Si ta colonne "date" - qui ne devrait pas s'appeler ainsi puisque c'est un mot réservé du langage SQL - est de type alphanumérique (alors qu'elle devrait être de type DATE), utilise la fonction STR_TO_DATE pour transformer cette chaîne de caractères en date.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/03/2011, 18h58   #3
Invité de passage
 
Nicolas Clave
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Nom : Nicolas Clave

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 4
Points : 4
Citation:
Envoyé par CinePhil Voir le message
Si ta colonne "date" - qui ne devrait pas s'appeler ainsi puisque c'est un mot réservé du langage SQL - est de type alphanumérique (alors qu'elle devrait être de type DATE), utilise la fonction STR_TO_DATE pour transformer cette chaîne de caractères en date.
Bonjour et merci pour ce conseil malheureusement même en utilisant la fonction STR_TO_DATE le soucis reste le même !

Code :
SELECT * FROM evenement ORDER BY STR_TO_DATE(datemodif, \"%Y%m%d\") DESC LIMIT 20;
La liste est bien affiché par dates mais du plus ancien au plus récent !

PS: J'ai bien essayé de changer le DESC par ASC rien y fait !
clave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 20h10   #4
Invité de passage
 
Nicolas Clave
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Nom : Nicolas Clave

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 4
Points : 4
Bon en fait ça ne trie rien du tout !

J'ai essayé après avoir modifié le champs date d'un évènement la requête ainsi :
Code :
SELECT * FROM evenement ORDER BY STR_TO_DATE(datemodif, \"%Y%m%d\") DESC LIMIT 5;
ou
Code :
SELECT * FROM evenement ORDER BY cast(`date` AS DATETIME) DESC LIMIT 5;
Et mon évènement est resté exactement a la même place !

La requête fait tout simplement un select du plus ancien au plus récent. Dans mes requêtes précédentes je n'avais donc que mes 5 premiers évènements créés!

Je vois pas ou ça cloche...
clave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 20h47   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
contenant du texte de la forme jj/mm/yyyy hh :mm
Donc il faut respecter le format (les espaces entre heures et minutes sont peut être important):
Code :
str_to_date(date,'%d/%m/%Y %H :%i')
voir si nécessaire (je ne sais pas) rajouter les secondes :
Code :
str_to_date(concat(date,' :00'),'%d/%m/%Y %H :%i :%s')
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/03/2011, 23h31   #6
Invité de passage
 
Nicolas Clave
Inscription : janvier 2010
Messages : 40
Détails du profil
Informations personnelles :
Nom : Nicolas Clave

Informations forums :
Inscription : janvier 2010
Messages : 40
Points : 4
Points : 4
Code :
str_to_date(date,'%d/%m/%Y %H :%i')
Et voila que demander de plus... ça marche impec.

Merci a vous deux
clave est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h03.


 
 
 
 
Partenaires

Hébergement Web