是否有人知道如何查询vbulletin数据库以生成每月/每年注册数量的报告,以达到如下结果:
MM/YYYY Count
01/2001 : 10
02/2001 : 12
...
...
感谢下面的答案。我的最终版本如下:
SELECT
COUNT(*) as 'Registrations',
YEAR(FROM_UNIXTIME(joindate)) as 'Year',
MONTH(FROM_UNIXTIME(joindate)) as 'Month'
FROM vbfuser
GROUP BY Year,Month
答案 0 :(得分:7)
我不熟悉vBulletin的数据库结构,但你应该做这样的,假设你的用户表有一个日期/日期时间/时间戳created_date
或reg_timestamp
列或类似的东西,使用 MySQL的YEAR()和MONTH()函数。
select
count(*) as count,
year(reg_timestamp) as year
month(reg_timestamp) as month
from users
group by year, month;
这将产生类似于此的东西:
+-------+-------+------+
| count | month | year |
+-------+-------+------+
| 4 | 11 | 2008 |
| 1 | 12 | 2008 |
| 196 | 12 | 2009 |
| 651 | 1 | 2010 |
+-------+-------+------+
编辑:关于Dave的评论: vBulletin的日期似乎以Unixtime格式存储。在这种情况下,只需用FROM_UNIXTIME
包装列就可以将其转换为可读的MySQL日期:
select
count(*) as count,
year(from_unixtime(reg_timestamp)) as year
month(from_unixtime(reg_timestamp)) as month
from users
group by year, month;
答案 1 :(得分:0)
vBulletin保留每日统计数据,因此可以更好地处理该表。计算新注册并不是一个问题,但如果你想计算帖子,它最终会变得昂贵。这是一个做你想做的事的例子:
SELECT
DATE_FORMAT(FROM_UNIXTIME(dateline), '%m/%Y') AS month,
SUM(nuser) AS new_users
FROM stats
GROUP BY month
ORDER BY dateline
答案 2 :(得分:-1)
您必须按字段分组:
select MONTHYEAR month , count(*) from tabname group by MONTHYEAR
有了这个,您将阅读所有月份并计算不同的行,获得您需要的信息。
如果您提供users表,则可能会有更多帮助;)