Mysql запрос, чтобы получить посты за последние 6 месяцев, сгруппированные по месяцам - PullRequest
1 голос
/ 17 января 2011

Я пытаюсь создать график количества сообщений пользователя за последние 6 месяцев с помощью Google Charts API. Моя структура таблицы такая -

-> Userid - varchar(20)
-> Post_year - varchar(4)
-> Post_month - varchar(2)

Чтобы получить количество сообщений за последние 6 месяцев пользователем, у меня есть такой запрос ...

SELECT COUNT(*) AS count, `Post_year`, `Post_month`
FROM (`table`)
WHERE `Userid` = '1234'
AND `Post_year` >= '$year_offset'
AND `Post_month` >= '$month_offset'
GROUP BY `Post_year`, `Post_month` 

Как видите, я сохраняю только год и месяц после записи, а затем использую переменную смещения для получения сообщений. Это работает как ...

Случай 1: если текущий год и месяц - 2010/12, то смещенные - 2010/7 Случай 2: если текущий год и месяц - 2011/1, то смещения - 2010/8

Теперь запрос в случае 1 работает нормально, как и предполагалось.

// Get all posts by a user
// ...
WHERE Post_year >= 2010
AND Post_month >= 7

Но в случае 2 это не так. Поскольку последняя часть запроса становится ...

// Get all posts by a user
// ...
WHERE Post_year >= 2010
AND Post_month >= 8

Следовательно, посты 2010/1 года не удовлетворяют условию Post_month >= 8.

Как мне изменить свой запрос, чтобы он работал и в случае 2.

Привет

Ответы [ 2 ]

1 голос
/ 17 января 2011

Вы можете сделать что-то вроде

AND `Post_year` * 100 + `Post_month` >= $year_offset * 100 + $month_offset

Но правильный способ - ввести поле Post_date и использовать его в запросе.

0 голосов
/ 17 января 2011
SELECT 
  COUNT(*) AS count, 
  `Post_year`, 
  `Post_month`
FROM (`table`)
WHERE `Userid` = '1234'
  AND `Post_year` >= '$year_offset'
  AND `Post_month` >= '$month_offset'
UNION ALL
SELECT 
  COUNT(*) AS count, 
  `Post_year`, 
  `Post_month`
FROM (`table`)
WHERE `Userid` = '1234'
  AND `Post_year` = YEAR(CURRENT_TIMESTAMP)
  AND `Post_month` <= '$month_offset'
GROUP BY `Post_year`, `Post_month`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...