2011-02-18 59 views
4

沒有任何人任何想法如何查詢vBulletin數據庫,生成每月註冊的數量的報告/年才達到類似的結果..如何編寫計算每月和每年行數的SQL查詢?

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 

回答

7

我不熟悉的vBulletin的數據庫結構,但你應該做這樣的事情,假設你的用戶表有一個日期/日期/時間戳created_datereg_timestamp列或somethi ng類似,使用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 | 
+-------+-------+------+ 

編輯:關於戴維的評論: 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

太感謝您了。只有一點需要注意的其他人誰讀這是vBulletin日期格式是在UNIX日期格式,需要轉換。所以看看我的格式化語法的原始問題 – Dave 2011-02-18 12:51:40

-1

你要組由現場月份:

select MONTHYEAR month , count(*) from tabname group by MONTHYEAR 

這一點,你會閱讀所有monthyears並統計不同的行,獲得您需要的信息。

如果您提供的用戶表,它可能是更多的幫助;)

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