2015-02-14 3 views
1

Я пытался создать страницу (шаблон), чтобы отобразить мое «Письменное поведение» моего блога. Чтобы показать, какой час я отправляю больше всего за день всех времен, мне нужно рассчитать «среднее по времени (час) дня», чтобы я мог знать, что «я обычно отправляю блог утром ...»Как получить средний пост-час (час) дня в Wordpress?

Первая мысль пришла мне на ум, суммирует все «время (часы)», а затем делит их на «итоговый счетчик», а затем переводит в формат 24 часа, чтобы показать, но, похоже, мой код не работает.

Ядром код, который я написал, как это:

<?php 
$alltimes=$wpdb->get_var($wpdb->prepare("SELECT sum(post_date) FROM $wpdb->posts WHERE post_type = 'post'", $alltimes)); 
echo '<p>Total post count '.$published_posts.'</p>'; 
$count_posts = wp_count_posts(); $published_posts = $count_posts->publish; 
$averagetime= $alltimes/$published_posts; 
echo '<p>Average Time count is '.$averagetime.'</p>'; 
echo'<p>Average time is '.date('Y-m-d h:i:s',$averagetime).'</p>'; 
?> 

Моя ошибка год, месяц, день, час, сек .. все суммируется до «$ alltimes», так что, когда я разделяю его воли стать катастрофой.

Возможно, если бы я мог получить «час» в «post_date», но не весь «post_date» выполнит эту работу, но как?

Спасибо за ваше время.

+0

Другая проблема с вашим кодом, если вы хотите получить его, - это цифра, которую он возвращает, не будет фигурой, которую вы ищете. Несмотря на то, что вы получаете среднее значение, которое вы в конечном итоге получите, это среднее значение, когда фигурой, которую вы ищете, является режим (как показано в ответе @Cyclone). –

ответ

2

Я думаю, что вы ищете такой запрос. Я использую HOUR() и DATE() для извлечения даты и часа детали из значения даты и времени:

SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts 
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW()) 
GROUP BY hour 
ORDER BY posts DESC; 

Это покажет, сколько сообщений было сделано в разное время суток, уведомления что это только вернется строки, где post_date соответствуют текущей дате. Если вы хотели бы получить максимум часа на основе всех сообщений нужно просто удалить DATE(post_date) = DATE(NOW()) условия:

+------+-------+ 
| hour | posts | 
+------+-------+ 
| 18 | 15 | 
| 19 | 12 | 
| 21 |  2 | 
+------+-------+ 

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

SELECT hour, MAX(posts) posts FROM ( 
    SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts 
    WHERE post_type ='post' && DATE(post_date) = DATE(NOW()) 
    GROUP BY hour ORDER BY posts DESC 
) v; 

или как это:

SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts 
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW()) 
GROUP BY hour 
ORDER BY posts DESC 
LIMIT 1 

Ссылка
Mysql - Date and Time Functions

+0

Спасибо, Cyclone, я сделал небольшую модификацию с кодом, добавьте его в php, но результат становится пустым на странице:

 get_var("SELECT HOUR(post_date) hour, COUNT(*) posts FROM $wpdb->posts WHERE post_type = 'post' && DATE(post_date) = DATE(NOW()) GROUP BY hour ORDER BY posts DESC LIMIT 1", $rushour); echo $rushour; ?> 
Любые подсказки об этом? – freeduke

+0

Привет, Cyclone, я пробовал ваши последние 2 запроса на phpMyadmin, и он возвращался пустым. Я удалил «&& DATE (post_date) = DATE (NOW())», все работает хорошо, и результат отображается, как вы упомянули. В любом случае, спасибо за вашу помощь, я оглядываюсь назад на мой предыдущий код, и я был настолько глуп: P – freeduke

+0

@freeduke - Приятно, что вы это решили. Странно, что 'NOW()' не работает для вас. Какова версия вашего сервера? – Cyclonecode

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