4

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

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

メタ値の日付順にデータを出力するために、クエリを使用しています

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

ただし、結果は日付順に並べられているのではなく、次のように表示されます。

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

クエリのどこが間違っているのか、event_dateによって正しく順序付けられたレコードを表示するにはどうすればよいですか。日付の入力形式は、UI /Datepickerを介してMMdd、yyです。

4

2 に答える 2

9

この関数DATE_FORMATは、日付を文字列にフォーマットします。しかし、あなたは逆のことをしたいのです。これを行うには、次の関数を使用しますSTR_TO_DATE

ORDER BY STR_TO_DATE(event_date, '%M %d, %Y') DESC

MySQLの日付関数の詳細については、http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-dateを参照してください。

于 2012-08-18T11:23:29.753 に答える
5

DATE_FORMATDATETIMEデータ型から文字列になります。失敗しても不平を言うことはなく、NULLを返すだけです。これが、ORDER BYが機能していなくても、クエリが機能している理由です。

STR_TO_DATEあなたはあなたがやろうとしていることに使う必要があります。

于 2012-08-18T11:23:40.397 に答える