2015-12-27 58 views
0

我有一個數據庫表與IP地址的列表每一個datetime列,這基本就是這樣的例子:選擇所有MySQL的數據,計算每月的記錄,一年不能正常工作

ip_address | date_first_viewed 
192.122.42.2 2015-12-23 14:03:10 
183.123.13.4 2015-12-23 02:11:10 
193.311.31.6 2015-11-10 12:29:00 

我想選擇,計數和組數據,根據月,年所以它會顯示爲:

(2015, 12) 2 
(2015, 11) 1 

這裏是我使用的雖然並不返回任何日期無論如何我目前的查詢?

$sql8 = "SELECT COUNT(ip_address) as count, EXTRACT(YEAR_MONTH FROM date_first_viewed) as date 
     FROM `all_website_stats` 
     GROUP BY EXTRACT(YEAR_MONTH FROM date_first_viewed)"; 
+0

你的SQL似乎工作。我創建了一個重複的表併成功地運行了該查詢。可能這個問題在你的PHP中呢?通過在代碼之外執行查詢來驗證它是否對數據庫正確運行。我的首選是在寫入我的代碼之前從命令行執行查詢。 – Redbeard011010

+1

另一個說明,我認爲「count」和「date」都是保留字。它在我的測試中似乎沒有引起任何問題,但我強烈建議使用反引號來避開這些詞,或稍微改變它們以不再是保留字。將計數更改爲ip_count或其他。 – Redbeard011010

+0

我已經調整了我的代碼到你的建議,它現在返回的數據,但只有'201512'有沒有辦法使用我的SQL將這個日期分開到'2015,12'呢,還是必須手動完成? – Snappysites

回答

0

你的SQL看起來不錯。只是爲了避免出現問題,請使用反引號來避開保留字countdate。爲了得到你想要的格式的日期,你可以試試這個查詢,這只是地連接了其他字符你想要的格式:

SELECT CONCAT('(', YEAR(date_first_viewed), ', ', MONTH(date_first_viewed), ')') FROM table;

因此,對於你的例子:

SELECT COUNT(ip_address) as `count`, CONCAT('(', YEAR(date_first_viewed), ', ', MONTH(date_first_viewed), ')') as `date` 
    FROM `all_website_stats` GROUP BY CONCAT('(', YEAR(date_first_viewed), ', ', MONTH(date_first_viewed), ')')"; 

應該做的它!

相關問題