MYSQL按日期时间排序按字母顺序而不是按时间顺序输出

MYSQL按日期时间排序按字母顺序而不是按时间顺序输出,mysql,datetime,Mysql,Datetime,我使用以下查询返回按datetime字段排序的行 SELECT DISTINCT firstname, surname, email, DATE_FORMAT(dateregistered,'%y %b %d') AS dateregistered FROM clients, registrations, courses WHERE clients.id = registrations.clientid ORDER BY dateregistered 但它又回来了 13 Nov 05 14

我使用以下查询返回按datetime字段排序的行

SELECT DISTINCT firstname, surname, email, DATE_FORMAT(dateregistered,'%y %b %d') AS dateregistered FROM clients, registrations, courses
WHERE clients.id = registrations.clientid
ORDER BY dateregistered
但它又回来了

13 Nov 05

14 Apr 01

14 Feb 25

14 Mar 01
而不是:

13 Nov 05
14 Feb 25
14 Mar 01
14 Apr 01
它似乎是按月份的字母顺序排列的


如何在实际日期订购?

在SELECT子句中使用不同的投影:

... DATE_FORMAT(dateregistered,'%y %b %d') AS formattedDateRegistered
因为您正在强制转换该列,所以该列的名称与它本身的名称相同

因此,最终的查询可能是:

SELECT DISTINCT firstname, surname, email,
DATE_FORMAT(dateregistered,'%y %b %d') AS formattedDateregistered
FROM clients, registrations, courses
WHERE clients.id = registrations.clientid
ORDER BY dateregistered

问题是您已重新格式化该日期列,并将其命名为相同的名称。要解决此问题,请在
order by子句中使用表别名

SELECT DISTINCT firstname, surname, email,
       DATE_FORMAT(dateregistered,'%y %b %d') AS dateregistered
FROM clients c join
     registrations r
     on c.id = r.clientid cross join
     courses
ORDER BY r.dateregistered;
注意,我在查询中澄清了联接。这种结构很奇怪。我认为您缺少
课程
的加入条件