mySQL order by date字段不起作用

Ran*_*eep 2 mysql sql-order-by

我试图从2个表帖子和postmeta中获取数据

示例wp_posts表

ID      post_title          post_name
328   Test Event Five   test-event-five
326   Test Event Four   test-event-four
324   Test Event Three  test-event-three 
321   Test Event  Two   test-event-two 
320   Test Event One    test-event-one
Run Code Online (Sandbox Code Playgroud)

示例wp_postmeta表

id  post_id       meta_key                    meta_value
1    328      calendar_start-date            August 08, 2012
2    326      calendar_start-date            August 09, 2012
3    324      calendar_start-date            September 06, 2012
4    321      calendar_start-date            August 23, 2012  
5    320      calendar_start-date            September 17, 2012
Run Code Online (Sandbox Code Playgroud)

为了输出元数值中日期排序的数据,我正在使用查询

SELECT wp_posts.ID, 
       wp_posts.post_title, 
       wp_posts.post_name, 
       wp_postmeta.post_id,
       wp_postmeta.meta_value as event_date 
FROM wp_posts, wp_postmeta 
WHERE wp_posts.ID = wp_postmeta.post_id 
AND wp_postmeta.meta_key = 'calendar_start-date' 
AND wp_posts.post_status = 'publish' 
AND wp_posts.post_type = 'calendar' 
ORDER BY DATE_FORMAT( event_date, '%M %d, %Y' ) DESC 
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)

但结果并没有按日期排序,而是按照日期排序

ID     post_title          post_name      post_id   event_date
328  Test Event Five    test-event-five     328     August 08, 2012
326  Test Event Four    test-event-four     326     August 09, 2012
324  Test Event Three   test-event-three    324     September 06, 2012
321  Test Event  Two    test-event-two      321     August 23, 2012
320  Test Event One     test-event-one      320     September 17, 2012
Run Code Online (Sandbox Code Playgroud)

我在查询中哪里出错,如何显示event_date正确排序的记录.日期的输入格式为MM dd,yy到UI/Datepicker.

mat*_*s.p 7

该函数DATE_FORMAT将日期格式化为字符串.但你想做相反的事情.为此,请使用以下功能STR_TO_DATE:

ORDER BY STR_TO_DATE(event_date, '%M %d, %Y') DESC
Run Code Online (Sandbox Code Playgroud)

有关MySQL中日期函数的更多详细信息,请参阅http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date.


O. *_*nes 5

DATE_FORMAT从DATETIME数据类型转换为字符串。它在失败时不会发牢骚,只会返回NULL。这就是您的查询有效的原因,即使ORDER BY无效。

您需要使用STR_TO_DATE您要尝试执行的操作。