我在 MySQL
数据库中插入带有 timestamp
的新闻日期。现在我需要像这样对我的新闻进行高级存档:
2013
July (4)
News 1
News 2
News 3
News 4
December (2)
News 1
News 2
NovemberPrint (4)
News 1
News 2
News 3
News 4
2014
January (8)
News 1
News 2
News 3
News 4
News 5
News 6
News 7
News 8
现在我需要任何 PHP 函数
和 MySQL SELECT
结构来使用 PDO 或 MySQL 查询打印它。
在线示例 HERE
编辑: 我发现这个问题来自 Here :
$sql = "SELECT YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTHNAME(FROM_UNIXTIME(timestamp)) AS MONTH,
COUNT(*) AS TOTAL
FROM NEWS GROUP BY YEAR, MONTH ORDER BY YEAR DESC, MONTH ";
$newsdata = DataAccess::ArrayFetch($sql);
$currentYear = null;
foreach($newsdata AS $news){
if ($currentYear != $news['YEAR']){
echo '<h2>'.$news['YEAR'].'<h2>';
$currentYear = $news['YEAR'];
}
echo '<dd>'.$news['MONTH'].'<dd><dt>'.$news['TOTAL'].'</dt>';
}
但是,此打印仅按年份和月份计数和分组。我需要在每个月后列出文章。
最佳答案
如果您还需要各个文章的名称,则不能使用 GROUP BY。只需获取整个列表,然后按年和月分组到一个数组中。
$sql = "SELECT timestamp, your_id_column, your_title_column FROM `NEWS` ORDER BY timestamp DESC";
$newsdata = DataAccess::ArrayFetch($sql);
$nav = array();
foreach ( $newsdata as $news ) {
$year = date('Y', $news['timestamp']);
$month = date('F', $news['timestamp']);
$nav[$year][$month][$news['your_id_column']] = $news['your_title_column'];
}
当您迭代生成的数组时,您可以计算每年/每月的新闻条目以生成总数。
<ul>
<?php
foreach ( $nav as $k => $v ) {
?>
<li><?php echo $k ?>
<ul>
<?php
foreach ( $v as $k2 => $v2 ) {
?>
<li><?php echo $k2.' ('.sizeof($v2).')' ?>
<ul>
<?php
foreach ( $v2 as $k3 => $v3 ) {
?>
<li><?php echo $v3 ?></li>
<?php
}
?>
</ul>
</li>
<?php
}
?>
</ul>
</li>
<?php
}
?>
</ul>
关于php - 使用 PHP MySql 的高级新闻存档年/月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957249/