Курилка.co.ua
Orphus RSS kurilka.co.ua

Category

Archives

Данные за последние N дней (запрос MySQL)

Author wmas wmas | Category Category MySQL, PHP

Памятка. Недавно вот баловался с плагинов для WordPress: Most Recent Post. Вообще, там все реализовано правильно – наиболее недавние заметки, т.е. сортировка по дате. Но это же не интересно. На главной странице блога тоже самое. Как по мне, более интересным может быть: Most Popular Post. Как определить какой пост наиболее популярен? Вопрос достаточно сложный. Можно установить плагин подсчета количества просмотров (даже уников) заметки и сортировать по этому значению, а можно использовать количество отзывов, но тогда придется воспользоваться сторонним источником данных. Наиболее простым, может быть использование количества комментариев. В любом случае, дабы поддерживать новизну, лучше ограничить выборку заметок за последние N дней. К примеру, последние 30 или даже 60 дней, в зависимости от того как часто вы публикуете заметки. Как все это сделать? Начну с конца.

WHERE TO_DAYS(NOW()) — TO_DAYS(post_date) <= 30

Это часть запроса к базе данных MySQL, которая от текущей даты NOW() отнимает дату создания заметки post_date, при этом переведя дату в количество дней функцией TO_DAYS(), ну и условие что полученное значение меньше или равно 30 дням. Таким образом мы ограничиваем выборку заметок за последние 30 дней. Сортировка по количеству комментариев:

ORDER BY comment_count DESC

При этом, учитывайте, что я основывался на структуре базы данный WordPress 2.x.x, но общая идея думаю понятна. Честно говоря, эту идею я позаимствовал из фишек к шаблонам движка inTerra, но ограничение выборки за определенный период нашел где-то в Интернете. Так что думаю вариантов много. Для тех же кому интересно накропать свой Most Popular Post, вот общий вид этого решения:

<php
$request = "SELECT *
  FROM $wpdb->posts
  WHERE
    post_status = 'publish' AND
    post_type = 'post' AND
    post_password = '' AND
    TO_DAYS(NOW()) - TO_DAYS(post_date) <= 30
  ORDER BY comment_count DESC
  LIMIT 10";
$posts = $wpdb->get_results($request);

if (have_posts()) :
while (have_posts()) : the_post();
?>
…
<php endwhile; endif; ?>

Думаю, все просто и понятно. Выборка идет с дополнительными ограничениями: заметка опубликована, тип документа – заметка и заметка без пароля. Плюс не более 10 записей в результате запроса. Дальше можно пользоваться стандартными функциями по отображения заметки и т.п. Спасибо за внимание.

Publish: Среда Ноя 14, 2007

Comments are closed.


Popular links

Copyright © since 2006 Курилка.co.ua,
powered by WordPress