【问题标题】:PHP MySql: print total post monthly archivePHP MySql:打印总帖子每月存档
【发布时间】:2014-06-23 12:16:04
【问题描述】:

我需要按年(12 个月)按 json 格式打印 Total(count) 新闻存档,如下所示:

输出:

["January:31","February:28","March:0","April:130","May:450","June:0","July:0","August:0","September:0","October:520","November:20","December:31"]

PHP 代码:

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

注意: if we dont have news in any month print:0 "March:0","July:0".....

如何打印?!

【问题讨论】:

  • 你能发布你目前所拥有的吗?
  • StackOverflow 将被用作指南来帮助您找到答案,我们将不会为您编写代码。到目前为止,您为解决这个问题写了什么?
  • SELECT COUNT(<column_containing_news_count>) AS num_of_articles, MONTHNAME(date) as month_name FROM aticle GROUP BY MONTHNAME(date); ?
  • @esqew:这是真的。但我对此一无所知。我的问题是这个!
  • @user27133 您可以先执行查询并将结果加载到数组中,不是吗?

标签: php mysql


【解决方案1】:

您可以使用IFNULL 来检查是否找不到数据,它应该是0..

请尝试下面给出的查询。

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

谢谢

【讨论】:

    【解决方案2】:

    您可以通过为所需的每个月/年组合生成一行来做到这一点。假设每个月和年至少有一个值,最简单的方法是:

    SELECT COUNT(*) AS id, y.yr, m.mon, m.mname
    FROM (select distinct year(date) as yr from article) y cross join
         (select distinct month(date) as mon, monthname(date) as mname from article) m left join
         article a
         on year(a.date) = y.yr and month(a.date) = m.mon
    GROUP BY y.yr, m.mon;
    

    否则,您将不得不找到一种方法来获取所有月份的列表,使用类似的方法:

    select 1 as mon, 'Jan' as mname union all
    . . . 
    

    【讨论】:

    • 最简单的方法不起作用。你测试一下?
    • @user27133 。 . .我已经多次运行类似的查询。怎么不行?
    • 我添加此代码用于输出:$value = array(); foreach($stats as $key => $value){ $rows2[] = $value['mname']; } echo json_encode($rows2); 输出为:[null,"February",null,"February"] 这对于整个月的打印都很简单。
    • 对于打印我选择真正的方式?
    猜你喜欢
    • 2014-02-19
    • 2013-01-07
    • 2012-08-31
    • 2013-06-25
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多