MYSQL按日期时间排序按字母顺序而不是按时间顺序输出
我使用以下查询返回按datetime字段排序的行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
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;
注意,我在查询中澄清了联接。这种结构很奇怪。我认为您缺少课程
的加入条件