2014-06-20 77 views
3

我使用json輸出計算按時間戳月份的文章視圖。我有這樣的代碼:如何從PHP中的MySQL時間戳計數打印月份名稱?

$value = array(); 
$stats = Access::FETCH("SELECT COUNT(*) AS id FROM news_stats GROUP BY YEAR(date), MONTH(date)"); 

foreach($stats as $key => $value){ 

    $rows2[] = $value['id']; 

    } 
echo json_encode($rows2); 

輸出爲:NOTE: this is count for month each month

["1","6"] 

我需要爲這個輸出中類似這樣的打印月份名稱:

["january","June"] 

如何在打印月份名嗎? Menaig是:1 , 6從哪月算起?

+0

http://www.php.net//manual/en/function.date.php看看選項「F」 – VikingBlooded

+2

@joe爲什麼在PHP中當它通過'MONTHNAME'在MySQL中處理? https://dev.mysql.com/doc/refman/5.5/zh-cn/date-and-time-functions.html#function_monthname – JakeGould

回答

2

試試這個:

$value = array(); 
$stats = Access::FETCH("SELECT id, YEAR(FROM_UNIXTIME(date)) AS `YEAR`, 
       MONTHNAME(FROM_UNIXTIME(date)) AS `MONTH`, 
       COUNT(*) AS id 
     FROM news_stats GROUP BY `YEAR`, `MONTH` ORDER BY `YEAR` DESC, `MONTH`"); 


foreach($stats as $key => $value){ 

    $rows2[] = $value['MONTH']; 

    } 
    echo json_encode($rows2); 

輸出是:

["June","August"] 

享受!

4

你可以做到這一點在MySQL本身通過調整你的查詢,像這樣使用MONTHNAME

SELECT COUNT(*) AS id FROM news_stats GROUP BY YEAR(date), MONTHNAME(date); 

在PHP中通過mktime/date組合的唯一實際價值是你的s cript需要數字值以及整個月份名稱本身。但是,MySQL也可以通過類似SELECT YEAR(date) as year, MONTH(date) as month, MONTHNAME(date) as month_name…的方式來解決這個問題,但這完全取決於編碼需求。

此外,剛剛意識到它在您的示例中全部編碼爲GROUP BY。所以,這可能會更好地工作:

SELECT COUNT(*) AS id, 
YEAR(date) as `year`, 
MONTH(date) as `month`, 
MONTHNAME(date) as `month_name`, 
FROM `news_stats` 
GROUP BY `year`, `month`; 
+0

這仍然不會在他的結果集中給他月份名稱。 –

+0

@MikeBrant注意。增加了我的認識,'GROUP BY'是查詢返回值的地方。現在調整在我最近的編輯。 – JakeGould

+0

@JakeGould:傑克我有一個問題:可以列出一年中的所有月份並按月計算,如果每個月的印刷數沒有計數,則顯示0像這樣:'[「12」,「0」,「0 「,」120「,」70「,」30「,」20「,」11「,」0「,」0「,」10「,」89「]'如何創建? – user27133

相關問題