#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