2013-02-05 19 views
0

我想查找按月份分組的每個用戶的帖子數。 我目前使用INT(10)unsigned來存儲帖子的日期。查找按月分組的用戶帖子,unixtime

什麼是一個超快速的方式來做到這一點?

CREATE TABLE IF NOT EXISTS `media` (
    `pid` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `class` tinyint(1) NOT NULL DEFAULT '1', 
    `date_class_changed` int(10) unsigned NOT NULL, 
    `title` char(5) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL, 
    `url` varchar(1024) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `media` enum('image','video') CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `thumb` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `description` varchar(140) COLLATE utf8_unicode_ci NOT NULL, 
    `username` varchar(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `date` int(10) unsigned NOT NULL, 
    `file` varchar(1024) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `hash` char(32) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `hashtag` text CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `meta` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `ip` int(10) unsigned NOT NULL, 
    `kind` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    PRIMARY KEY (`pid`), 
    UNIQUE KEY `title` (`title`), 
    KEY `hash` (`hash`), 
    KEY `class_date` (`class`,`date_class_changed`), 
    KEY `username` (`username`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1022724 ; 

這是表,我說的是,我想顯示的帖子針對每個用戶對每個蒙,如數量:2012年9月,用戶X,N帖等。

從@fthiella的幫助後,我使用的查詢是:

SELECT 
    DATE_FORMAT(FROM_UNIXTIME(`date`), '%Y-%m') as YearMonth, username, COUNT(*) as Posts 
FROM 
    media 
WHERE username = 'foobar' 
GROUP BY 1 
ORDER BY 1 DESC 

感謝上帝它的速度不夠快,現在我會盡力的情況下,優化它不使用索引,但現在幾乎1M紀錄表現不俗。乾杯。

+1

能否請您給您的數據的一個例子,你如何需要分組 – ManseUK

+1

請添加表結構,例如數據和expeted結果 –

回答

1
SELECT 
    DATE_FORMAT(FROM_UNIXTIME(`date`), '%Y-%m') as YearMonth, 
    username, 
    COUNT(*) as Posts 
FROM 
    media 
GROUP BY 
    DATE_FORMAT(FROM_UNIXTIME(`date`), '%Y-%m') as YearMonth, 
    username 
+0

它拋出一個錯誤:#1582 - 在調用不正確的參數個數DATE_FORMAT – sathia

+0

SELECT DATE_FORMAT(FROM_UNIXTIME('date'),'%Y-%m')AS YearMonth,現在我會做一些測試,看看它是否足夠快。謝謝! – sathia