简体   繁体   English

PHP和MYSQL中的新闻档案显示零结果

[英]News Archive in PHP and MYSQL displaying zero results

I am trying to list all the previous months in which posts have been made and display the number of posts, for example 我试图列出所有帖子的前几个月,并显示帖子数量,例如

2011
  November (14)
  October (12)
  April (3)
2010
  December (2)

    etc etc

The following code is how I am attempting to make this work however it doesnt actually return any results and I cannot seem to wrap my head around why. 以下代码是我试图使这项工作,但它实际上没有返回任何结果,我似乎无法理解为什么。

$sql = "SELECT nid, ndate FROM weaponsnews
    ORDER BY ndate DESC";
$result = $db->query($sql);

$data = array();

while($row = $result->fetch_assoc())
{
    $year = date('Y', strtotime($row['ndate']));
    $month = date('m', strtotime($row['ndate']));

    $data[$year][$month][] = $row;
}
$result->free();

foreach($data as $_year => $_months)
{
    echo $_year. "<br>";
    foreach($_months as $_month => $_entries)
    {
        $mentries = count ($_entries);
        echo $_month. " (" .$mentries. ")";

    }
}

It's easier if you do the count in the MySQL query. 如果在MySQL查询中进行计数,则会更容易。 For example: 例如:

SELECT YEAR(`ndate`) AS 'year', MONTH(`ndate`) AS 'month', COUNT(`nid`) AS 'count'  FROM `weaponsnews ` GROUP BY YEAR(`ndate`), MONTH(`ndate`) DESC

This gives you three columns, where the first is the year, the second is the month, and the third is the number of items in that month. 这将为您提供三列,其中第一列是年份,第二列是月份,第三列是该月份中的项目数。 You can then easily iterate through this list with foreach. 然后,您可以使用foreach轻松遍历此列表。 Something like: 就像是:

$data = array();
while($row = $result->fetch_assoc()) {
    $data[$row['year']][$row['month']] = $row['count'];
}
$result->free();

This should give you an array like: 这应该给你一个像这样的数组:

$data = array(
    '2001' => array(
        '1' => '83',
        '3' => '102'
    ),
    '2012' => array(
        '6' => '43',
        '9' => '33'
    ),
    '2013' => array(
        '7' => '55'
    )
);

You can print the tree by iterating through the array: 您可以通过迭代数组来打印树:

foreach ($data as $year => $months) {
    echo $year.'<br>';
    foreach ($months as $month => $count) {
            echo $month.'('.$count.')<br>';
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM