Mysql查询获取按月分组的过去6个月的帖子

时间:2011-01-17 07:28:09

标签: mysql sql group-by

我正在尝试使用Google Charts API为过去6个月内用户的帖子数创建图表。 我的表结构是这样的 -

-> 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 个答案:

答案 0 :(得分:1)

您可以执行类似

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

但正确的方法是引入Post_date字段并在查询中使用它。

答案 1 :(得分:0)

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`