使用 PHP MySql 的高级新闻存档年/月
Posted
技术标签:
【中文标题】使用 PHP MySql 的高级新闻存档年/月【英文标题】:Advanced news archive Years/Month using PHP MySql 【发布时间】:2014-01-06 19:00:14 【问题描述】:我在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 function
和 MySQL SELECT
结构来使用 PDO 或 MySQL Query 打印。
在线示例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>';
但是,此打印仅按年广告月计算和分组。我需要在每个月之后列出文章。
【问题讨论】:
我也需要很多!但是你做了什么来解决你的问题? 我们需要您的代码 Alex.DX,除非您希望我们从头开始编写代码,而这不会发生。 @Sergio 和 JakeGloud 我在编辑中添加了简单的代码。 【参考方案1】:如果您还需要单个文章的名称,则不能使用 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>
【讨论】:
【参考方案2】:您将要为此使用 MySQL:
ORDER BY DATE(actionTime)
只需按日期对结果进行排序,而不是对它们进行分组,然后将 count(*) 替换为 *。
【讨论】:
【参考方案3】:试试看:
SELECT YEAR(creation_date), MONTH(creation_date), COUNT(id) from news GROUP BY YEAR(creation_date), MONTH(creation_date)
【讨论】:
以上是关于使用 PHP MySql 的高级新闻存档年/月的主要内容,如果未能解决你的问题,请参考以下文章