2011-12-16 2 views
1

Ну, я работаю с wordpress, и я пытаюсь сортировать некоторые записи по дате пользовательского поля, содержащего дату. Ну, я могу сортировать результаты по дате, но я хочу показать результаты, которые имеют дату до сегодняшнего дня. Я не хочу получать результаты из сообщения, которое имеет будущую дату.MYSQL сортировать по дате с максимальной датой

Это код, я использую:

$querystr = " 
      SELECT wposts.* 
      FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
      WHERE wposts.ID = wpostmeta.post_id 
      AND wpostmeta.meta_key = 'date' 
      AND wposts.post_status = 'publish' 
      AND wposts.post_type = games' 
      ORDER BY STR_TO_DATE(wpostmeta.meta_value, '%m/%d/%Y') DESC 
      "; 

     $pageposts = $wpdb->get_results($querystr, OBJECT); 
+0

Вы можете разместить пример строки из базы данных, пожалуйста? – themerlinproject

ответ

1

Добавить это где пункт:

AND STR_TO_DATE(wpostmeta.meta_value, '%m/%d/%Y') <= DATE(NOW()) 
-2
WHERE STR_TO_DATE >= [start DATE] AND STR_TO_DATE <= [END DATE] 
+0

не то, что OP хотел и даже не работает, STR_TO_DATE - это функция, а не фактическая дата – codeling

+0

с возвращаемым значением – matting

+0

. Итак, вы, оператор, на самом деле должны быть своего рода псевдокодом? Но в любом случае OP хотел все записи до сегодняшнего дня, а не все записи в определенном диапазоне. – codeling

1

Просто добавьте его в ИНЕКЕ:

SELECT wposts.* 
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
WHERE wposts.ID = wpostmeta.post_id 
    AND wpostmeta.meta_key = 'date' 
    AND wposts.post_status = 'publish' 
    AND wposts.post_type = 'games' 
    AND STR_TO_DATE(wpostmeta.meta_value, '%m/%d/%Y') < NOW() 
ORDER BY STR_TO_DATE(wpostmeta.meta_value, '%m/%d/%Y') ASC 
+0

Должно быть '<= DATE (NOW())' not '

+0

Я проверил его, выполнив 'SELECT 1 FROM DUAL WHERE STR_TO_DATE ('12/16/2011 ','% m /% d /% Y ') <СЕЙЧАС()' (и '12/17/2011'), и это сработало, как я ожидал. Как вы сказали, кастинг с 'DATE()' будет работать, только если у вас есть '<=' Любой работает, я думаю. :) – bhamby

+0

Хотя, я только заметил, что OP забыл цитату в строке 'post_type' где ... – bhamby

0

Не видя вашей строки данных, я думаю, что некоторые вещь, как это будет делать трюк:

$today = "12/16/2011"; 

$querystr = "SELECT wposts.* 
      FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
      WHERE wposts.ID = wpostmeta.post_id 
      AND wpostmeta.meta_key = 'date' 
      AND wposts.post_status = 'publish' 
      AND wposts.post_type = 'games' 
      STR_TO_DATE(wpostmeta.meta_value, '%m/%d/%Y') <= $today; 
      ORDER BY STR_TO_DATE(wpostmeta.meta_value, '%m/%d/%Y') ASC"; 

Где вы генерирующий сегодняшнюю дату в PHP в том же формате, что и% м /% d /% Y

Смежные вопросы