Нахождение первого и последнего дня каждого месяца в период времени - PullRequest
0 голосов
/ 20 декабря 2010

У меня есть задача сделать статистику статей на основе результатов базы данных.Мне нужно рассчитывать количество статей, добавляемых ежемесячно, и передавать эти результаты в функцию статистики JavaScript.

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

SELECT MIN(date) as startdate FROM articles LIMIT 1 

SELECT MAX(date) as enddate FROM articles LIMIT 1

Теперь у меня есть период, который начинается с $startDate и заканчивается $endDate.Эти переменные являются временными метками Unix, поскольку они находятся в базе данных.Столбец date в базе данных также является меткой времени Unix.

Далее я должен найти количество статей, добавленных за каждый месяц, которые выполняют запрос в цикле foreach, например:

SELECT COUNT(id) as total FROM articles 
    WHERE date > ".$startMonth." AND date < ".$endMonth

Но для этого мне нужно найти первые и последние дни каждого месяца в периоде.И я застрял в этот момент.Поэтому, пожалуйста, вы можете предложить мне, как найти эти первые и последние дни в виде массива.Я думаю, что я должен сделать что-то вроде strtotime("+1 month",$date) в цикле while, пока $startDate не будет равен $endDate.Заранее спасибо.

Upd. Всего в базе 46 статей.Я хочу получить результаты, сгруппированные по месяцам:

SELECT date, COUNT(id) as total FROM `articles`
  WHERE `author`=$author
     GROUP BY date_format(date, '%Y-%m')

Результаты: сообщения за месяц 11-2010 13 12-2010 33

1 Ответ

2 голосов
/ 20 декабря 2010

Кажется, что вы можете достичь этого, используя GROUP BY, например

SELECT date_format(`date`, '%Y-%m'), COUNT(id) as total 
FROM articles 
GROUP BY date_format(`date`, '%Y-%m');

И вам не нужны границы даты ...

...