我的数据库表中有这些 mysql 日期,
2010-07-16 20:09:06
2010-08-16 20:19:43
2010-10-18 16:57:19
2009-09-18 16:57:42
2009-10-18 16:57:55
2009-12-24 14:59:21
如何将它们分类到下面的结果中,以便让最终用户浏览每月的结果?
<h2>2010</h2>
<ul>
<li><a href="#">October</a></li>
<li><a href="#">November</a></li>
<li><a href="#">December</a></li>
</ul>
<h2>2009</h2>
<ul>
<li><a href="#">September</a></li>
<li><a href="#">October</a></li>
<li><a href="#">November</a></li>
<li><a href="#">December</a></li>
</ul>
什么都想不到!
我通常使用 gmdate() 来格式化来自 mysql 数据库的日期,例如,
<?php
$sql = "
SELECT *
FROM root_pages
WHERE root_pages.pg_hide != '1'
ORDER BY pg_created DESC";
#instantiate the object of __database class
$object_items = new __database(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$items = $object_items -> fetch_all($sql);
echo gmdate('j/n/Y', strtotime($item['pg_created']));
?>
如果你能给我一些开始的提示就太好了!
谢谢, 刘
最佳答案
有很多方法可以做到这一点...使用 MySQL,您可以
SELECT DISTINCT YEAR(dt) y, MONTH(dt) m FROM t ORDER BY dt DESC
然后循环遍历结果:
$year = null;
foreach ($rows as $row)
{
if ($year != $row->y)
{
if ($year) echo "</ul>";
$year = $row->y;
echo "<h2>$year</h2>\n";
echo "<ul>\n";
}
echo "<li><a href='#'>{$month_name[$row->m]}</a></li>\n";
}
if ($year) echo "</ul>";
它假设有一个名为 $month_name
的数组,它将月份数字映射到它的名称。
如果您不需要该页面的其他数据,则此方法最有用。如果您确实需要完整的数据,那么您可以从 SQL 中删除 DISTINCT
,SELECT
所有您需要的字段,并添加一个变量来跟踪当前的 $month
贯穿整个迭代,就像上面的代码对 $year
所做的那样。
关于PHP:格式化和排序来自 MySQL 数据库的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818159/