Ограничение временных меток unix в SQL

#php #mysql #sql

#php #mysql #sql

Вопрос:

Я работаю над блогом на PHP / SQL и т.д., И я столкнулся с чем-то, что я считаю слишком продвинутым (очевидно) для моих знаний SQL. Я создаю раздел архива, в котором при создании записей сохраняется дата / время публикации в формате временных меток UNIX. Однако я хочу, чтобы архив отображался следующим образом:

 Date     Year Post Count
-------- ---- ----------
November 2011 2
December 2011 1
  

Я могу легко получить это:

 Date     Year Post Count
-------- ---- ----------
November 2011 2
November 2011 2
December 2011 1
  

Надеюсь, вы понимаете, чего я пытаюсь достичь. Мой текущий оператор SQL для этого:

 SELECT `post_date` FROM `blog_posts` ORDER BY `post_date` DESC
  

PHP обрабатывает большую часть сортировки, и есть способ, которым я могу добиться этого в PHP, но я уверен, что в SQL есть более простой способ.

Надеюсь, кто-нибудь сможет помочь.

Комментарии:

1. Какую базу данных вы используете? синтаксис зависит от базы данных.

Ответ №1:

Для MySQL (5.5) это было бы близко к следующему:

 SELECT MONTHNAME(post_date) AS month_col,
YEAR(post_date) AS year_col,
COUNT(*) AS num_posts
FROM blog_posts
GROUP BY YEAR(post_date), MONTH(post_date)
ORDER BY year_col, month_col DESC;
  

Вернет:

 December, 2011, 3
November, 2011, 2
December, 2010, 1
  

Комментарии:

1. спасибо, что в вашем примере удалось отсортировать его по SELECT MONTHNAME(FROM_UNIXTIME( дате )) AS archiveMonth, YEAR(FROM_UNIXTIME( post_date )) as archiveYear , COUNT(*) as num_posts` Из blog_posts ГРУППЫ По archiveMonth ПОРЯДКУ ПО archiveMonth описанию` И спасибо всем остальным, кто помог!

2. Пожалуйста, примите ответ, если вы считаете, что он был правильным или достаточно близким к нему. Также обратите внимание, что пример запроса, который вы опубликовали выше, сгруппирует Dec2011 и Dec2012 в одну и ту же группу Dec, и количество будет неправильным. Вам также нужно будет добавить год в качестве критерия группировки.

Ответ №2:

Я не знаю, какой SQL вы используете, но если это MySQL, должно сработать что-то вроде приведенного ниже.

 SELECT post_date, COUNT(*) 
FROM blog_posts 
GROUP BY post_date / 86400
ORDER BY post_date DESC
  

86400 поступает из 24 * 60 * 60 количество секунд в сутках.

Комментарии:

1. Страница благодарности попробует это, и да, MySQL