按年份和月份归档
问题描述:
我正在尝试建立年份\月份归档。按年份和月份归档
它拒绝输出我想要的东西,所以我希望你们中的一个人可能会把我推向正确的方向。
我想在今年进行排序,并显示该月每一年(如果存在),并将其输出是这样的:
2012
- June
- August
2011
- July
我的代码是这样的:
$query = "SELECT * FROM article WHERE full_name ='$safe_name' group by year, month";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
$year = $row['year'];
$month = $row['month'];
echo "<ul class='year'><li><a>{$year}</a>";
echo "<ul class='months'><li><a>{$month}</a></li></ul>
</li></ul>";
}
但它输出:
2012
- june
2012
- august
2011
- july
当我组仅在今年,它会输出:
2012
- june
2011
- july
我有一个“date_posted”行是datetime(yyyy-mm-dd 00:00:00)。 最重要的是,我有1行月和1年(我知道这是愚蠢的,但我无法弄清楚如何通过只使用“date_posted”行做到这一点。这个话题,但它没有这样做的伎俩,我 任何帮助是极大的赞赏
答
这应该起作用。当获取结果时,有时候是h andy将其重构为在迭代视图时易于使用。
$query = "SELECT * FROM article WHERE full_name ='$safe_name' group by year, month";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
// Get data
$year = $row['year'];
$month = $row['month']
// Structure it
$archive[$year][] = $month;
}
// Display data
foreach($archive as $year => $months)
{
// Show year
echo "<ul class='year'><li><a>{$year}</a>";
// Month container
echo "<ul class='months'>"
// Get months
foreach($months as $month)
{
echo("<li><a>{$month}</a></li>";
}
// Close Month/Year containers
echo("</ul></li></ul>");
}
+0
工程就像一个魅力!非常感谢! =) – Havihavi 2012-08-02 16:08:12
答
你需要使用一个简单的“状态”机检测时,一年的变化:!
$previous_year = null;
$frist = true;
echo "<ul>"
while($row = mysql_fetch_assoc($result)) {
if ($row['year'] != $previous_year) {
// got a new year
if (!$frist) {
echo "</ul></li>"; // only close a previous list if there IS a previous list
$frist = false;
}
echo "<li class="year">$row[year]\n<ul>";
$previous_year = $row['year'];
}
echo "<li class="month">$row['month']</li>";
}
答
$temp_year = 0;
while($row = mysql_fetch_assoc($result)) {
$year = $row['year'];
$month = $row['month'];
if($temp_year != $year)
{
if($temp_year > 0)
echo "</li></ul>";
$temp_year = $year;
echo "<ul class='year'><li><a>{$year}</a>";
}
echo "<ul class='months'><li><a>{$month}</a></li></ul>";
}
答
给一个镜头
$storage_array = array();
while($row = mysql_fetch_assoc($result)) {
$year = $row['year'];
$month = $row['month'];
$storage_array[$year][] = $month;
}
foreach ($storage_array as $year => $month_array){
echo "<ul class='year'><li><a>{$year}</a>";
foreach ($month_array as $month){
echo "<ul class='months'><li><a>{$month}</a></li></ul>";
}
echo "</li></ul>";
}
因为你想刚刚打印出来的每年一次,我可能会建议你将数据存储到一个数组,然后再输出,而阵列 – lusketeer 2012-08-02 15:40:25
在循环或者,只需将'$ year'和'$ month'的前一个值存储在变量中,并且只在它们更改时才打印出来;你可能还想在查询中做一个'SELECT DISTINCT year,month',这样你就可以获得唯一的值,并且只需要检索你正在查找的字段。 – andrewsi 2012-08-02 15:46:29