2014-06-20 40 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

相关问题