我需要按年和月列出帖子文章存档总数,如下所示:
输出(我的需要):
2014
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:
$sql = "SELECT title, YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTHNAME(FROM_UNIXTIME(timestamp)) AS MONTH,
COUNT(*) AS TOTAL
FROM article GROUP BY YEAR, MONTH ORDER BY YEAR DESC, MONTH ";
$newsdata = DB->fetch($sql);
$currentYear = null;
foreach($newsdata AS $news){
if ($currentYear != $news['YEAR']){
echo '<ul>'.$news['YEAR'].'</ul>';
$currentYear = $news['YEAR'];
}
echo '<li>'.$news['MONTH'].' '.$news['TOTAL'].'</li>';
}
我的代码有效,但如果本月发布文章,则仅打印月份。
输出:
2014
January(31)
February(28)
April(130)
May(450)
October(520)
November(20)
December(31)
我需要列出所有月份并打印每个月的总文章。如果月份未发布文章,则打印本月的 (0)
。
我该如何解决我的问题?我的代码/方式是真的吗?!
最佳答案
您的数据库查询不会返回没有文章的月份的行。它对月份一无所知。因此,您需要通过拥有所有月份的数组并循环遍历该数组来在代码中处理此问题。另一种方法是更改您的架构,使用另一个包含所有 12 个月的表,然后加入该表。但我认为以下内容对您来说更容易:
$months = array( "January", "February", ... );
然后您可以在输出中执行以下操作:
// Index article counts by month and year for easy lookup
$indexedNewsData = array();
foreach ($newsdata as $news) {
$indexedNewsData[$news['YEAR']][$news['MONTH']] = $news['TOTAL'];
}
// Then print output
foreach($newsdata AS $news){
if ($currentYear != $news['YEAR']){
echo '<ul>'.$news['YEAR'].'</ul>';
$currentYear = $news['YEAR'];
} else {
// Continue here otherwise we will print each year's data 12x
continue;
}
foreach ($months as $month) {
$total = intval($indexedNewsData[$news['YEAR']][$month]);
echo '<li>'.$month.' '.$total.'</li>';
}
}
关于php - 按年份和月份计算帖子存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24418268/