Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和MYSQL中的新闻存档显示零结果_Php_Mysql_Archive - Fatal编程技术网

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

PHP和MYSQL中的新闻存档显示零结果,php,mysql,archive,Php,Mysql,Archive,例如,我试图列出所有前几个月发表的帖子,并显示帖子的数量 2011 November (14) October (12) April (3) 2010 December (2) etc etc 下面的代码是我如何试图使这项工作,但它实际上并没有返回任何结果,我似乎无法理解为什么 $sql = "SELECT nid, ndate FROM weaponsnews ORDER BY ndate DESC"; $result = $db->query($sq

例如,我试图列出所有前几个月发表的帖子,并显示帖子的数量

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

    etc etc
下面的代码是我如何试图使这项工作,但它实际上并没有返回任何结果,我似乎无法理解为什么

$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. ")";

    }
}
$sql=“选择nid,从武器新闻中淹没
按“描述”命令;
$result=$db->query($sql);
$data=array();
而($row=$result->fetch_assoc())
{
$year=日期('Y',标准时间($row['ndate']);
$month=日期('m',标准时间($row['ndate']);
$data[$year][$month][]=$row;
}
$result->free();
foreach($年=>$月数据)
{
echo$_year.“
”; foreach($\u个月作为$\u个月=>$\u个条目) { $mentries=计数($\个条目); echo$_month.”(“$mentries.”); } }
如果在MySQL查询中进行计数,会更容易。例如:

SELECT YEAR(`ndate`) AS 'year', MONTH(`ndate`) AS 'month', COUNT(`nid`) AS 'count'  FROM `weaponsnews ` GROUP BY YEAR(`ndate`), MONTH(`ndate`) DESC
这将提供三列,其中第一列是年,第二列是月,第三列是该月的项目数。然后,您可以使用foreach轻松地遍历此列表。比如:

$data = array();
while($row = $result->fetch_assoc()) {
    $data[$row['year']][$row['month']] = $row['count'];
}
$result->free();
这将为您提供如下数组:

$data = array(
    '2001' => array(
        '1' => '83',
        '3' => '102'
    ),
    '2012' => array(
        '6' => '43',
        '9' => '33'
    ),
    '2013' => array(
        '7' => '55'
    )
);
您可以通过迭代数组来打印树:

foreach ($data as $year => $months) {
    echo $year.'<br>';
    foreach ($months as $month => $count) {
            echo $month.'('.$count.')<br>';
    }
}
foreach($year=>$months){
回音$year.“
”; foreach($月份为$月份=>$计数){ 回显$month.'('.$count.')
; } }
Ok如何更改它,以便我可以控制它在PHP中的显示方式,例如,现在它正在显示以下内容,
echo“$record[month]-$record[year]($record[count])”
as
3-2012(1)
这很好,我知道它正在工作,但是如果我想将它显示为
2012年3月(1)
我知道我可以用Strotime实现这一点,但是我可以把它放在哪里呢。我还没有试过这个代码,但它应该会给你一个方法。让我知道它是否有效。我实际上无法让您编辑的内容的第二部分正常工作,我已经非常接近我想要的方式了,但简单地说,我只想改变它显示的日期格式,
$rows=$db->fetch\u all\u array($sql);foreach($record的行){echo date('F',$record[month])。“”.date('o',$record[year])。”($record[count]);}
那么您想要2012年3月(1)而不是树?在本例中,请尝试:echo date('F',mktime(0,0,0,$record['month'])。$record['year'])('.$record['count'.')太好了,我可以处理,希望客户喜欢它的样子,谢谢