我正在尝试按日期升序排序日期和时间表,然后按升序开始时间,但是我的日期列表没有以正确的顺序显示。开始时间列表似乎确实有效。
订单应显示为18/08/2014然后19/08/2014然后2014年8月20日的所有条目然后.... 01/09/2014然后02/09/2014 ...等,2014年9月16日是最后一个条目。
注意:我已经将每个日期和开始时间存储为我的MySQL表中的VARCHAR,现在不能/不能改变它。每个日期都遵循dd / mm / yyyy(英国英语)格式。
任何人请可以通过指出我错过的内容来帮助我吗?
表'日程表'的表格设置
date VARCHAR(255)
start_time VARCHAR(255)
MySQL查询
SELECT * FROM schedule WHERE username='".$_SESSION['username']."' ORDER BY DATE_FORMAT(date, '%d/%m/%Y') ASC, start_time ASC
表格输出
Date Start time End time
16/09/2014
18/08/2014 10:00 16:00
21/08/2014 10:00 12:00
28/08/2014 10:00 12:00
10/09/2014 10:00 12:00
11/09/2014 10:00 12:00
12/09/2014 10:00 12:00
21/08/2014 13:00 15:00
28/08/2014 13:00 15:00
10/09/2014 13:00 15:00
11/09/2014 13:00 15:00
12/09/2014 13:00 15:00
01/09/2014 15:00 15:30
28/08/2014 15:00 15:30
21/08/2014 15:00 15:30
02/09/2014 15:00 15:30
03/09/2014 15:00 15:30
04/09/2014 15:00 15:30
05/09/2014 15:00 15:30
08/09/2014 15:00 15:30
09/09/2014 15:00 15:30
10/09/2014 15:00 15:30
11/09/2014 15:00 15:30
12/09/2014 15:00 15:30
15/09/2014 15:00 15:30
16/09/2014 15:00 15:30
21/08/2014 16:00
10/09/2014 16:00
11/09/2014 16:00
非常感谢任何帮助!
答案 0 :(得分:3)
首先,我重新考虑将任何日期或时间存储为字符串的想法......这导致了这种问题。
MySQL实际上将日期视为字符串,并添加日期功能..并以更合理的格式%Y-%m-%d存储它们,从而产生正确的排序。
如果您绝对无法更改数据库..请联系可以或运行您的查询的人:
SELECT *
FROM schedule
WHERE username='".$_SESSION['username']."'
ORDER BY STR_TO_DATE(date, '%d/%m/%Y') ASC, start_time ASC
DATE_FORMAT
将日期转换为指定的字符串格式。在你的情况下,它隐含地将你的字符串转换为一个日期(因为它被传递到函数中),然后将其格式化为它的原始格式..因此你看到的顺序。
答案 1 :(得分:1)
函数date_format()
格式化日期并输出字符串。你想要str_to_date()
:
ORDER BY STR_TO_DATE(date, '%d/%m/%Y')