web-dev-qa-db-fra.com

MYSQL - Ordonner les valeurs d'horodatage dans l'ordre croissant, du plus récent au plus ancien?

J'ai rencontré un problème lors de la commande de certains résultats en fonction de leur valeur d'horodatage.

J'aimerais que ces résultats soient affichés du plus récent au plus ancien en fonction des valeurs d'horodatage.

Donc pour expliquer cela, imaginez qu'il y a eu 3 résultats:

2012-07-11 17:34:57
2012-07-11 17:33:28
2012-07-11 17:33:07

Cet ensemble de résultats serait ce dont j'aurais besoin, mais étant donné la requête suivante

SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC

Je reçois:

2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28

C'est comme il est trié par valeur numérique et 07 vient avant 28.

Si je trie par ordre décroissant, je reçois

2012-07-11 17:33:07
2012-07-11 17:33:28
2012-07-11 17:34:57

C'est ce que je recherche ... Mais c'est l'inverse.

Donc ma question est assez simple, comment pourrais-je trier ces valeurs dans l'ordre croissant comme je l'ai décrit?

ÉDITER:

The problem

EDIT2:

CREATE TABLE `user_quotations` (
 `id` int(100) NOT NULL AUTO_INCREMENT,
 `quoteNumber` int(100) NOT NULL,
 `lastModified` datetime NOT NULL,
 `userId` int(100) NOT NULL,
 `manufacturer` varchar(250) COLLATE latin1_general_ci NOT NULL,
 `modelNumber` varchar(250) COLLATE latin1_general_ci NOT NULL,
 `productDesc` varchar(1000) COLLATE latin1_general_ci NOT NULL,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 KEY `quoteNumber` (`quoteNumber`,`lastModified`,`userId`,`manufacturer`,`modelNumber`,`timestamp`),
 KEY `productDesc` (`productDesc`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
11
Craig van Tonder

Votre requête :

SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC;

est parfait. Mais je doute des résultats que vous avez présentés dans votre message. Vous avez posté:

2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28

Mais les résultats dans votre sqlbox montrent:

2012-07-11 17:34:57
2012-07-15 17:33:07
2012-07-15 17:33:28

Qui ont parfaitement raison.

Est-ce une erreur de frappe dans votre publication?
Si non, essayez ce qui suit:

SELECT timestamp( `timestamp` ) as 'timestamp'
FROM randomTable
ORDER BY 1 ASC;
17
Ravinder Reddy

Vérifiez votre instruction create pour la table. Je suppose que votre colonne d'horodatage est vraiment une chaîne.

Show create table tablename;
4
Ray

la capture d'écran montre deux des résultats du 15e et un du 11e. Affecte probablement l'ordre un tout petit peu.

1
TheSatinKnight

si vous écrivez la requête comme:

select q.`timestamp`
from user_quotations as q
order by q.`timestamp`
limit 30

vous devriez les faire commander correctement.

Sinon, il y a un problème avec les données d'horodatage. Recherchez les espaces de début/de fin, les caractères impairs, etc.

1
Jeremy Holovacs