I am trying to get a data sorted from 2 tables posts and postmeta
Example wp_posts Table
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
Example wp_postmeta Table
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
In order to output the data ordered by the dates in the meta value, I am using the query
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
But the result is not ordered by the dates, instead it is coming as
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
Where am I going wrong in the query and how can I display the records ordered properly by the event_date. The input format of the date is MM dd, yy through UI/Datepicker.
The function DATE_FORMAT
formats a date to a string. But you want to do the reverse thing. To do that, use the function STR_TO_DATE
:
ORDER BY STR_TO_DATE(event_date, '%M %d, %Y') DESC
See http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date for more details on date functions in MySQL.
DATE_FORMAT
goes from DATETIME data types to strings. It doesn't grumble when it fails, it just returns NULL. That's why your query is working, even if the ORDER BY is not.
You need to use STR_TO_DATE
for what you're trying to do.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With