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:
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
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;
Vérifiez votre instruction create pour la table. Je suppose que votre colonne d'horodatage est vraiment une chaîne.
Show create table tablename;
la capture d'écran montre deux des résultats du 15e et un du 11e. Affecte probablement l'ordre un tout petit peu.
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.