0

年\月のアーカイブを作成しようとしています。

それは私が欲しいものを出力することを拒否するので、あなたの一人が私を正しい方向に押してくれることを願っています。

年で並べ替えて、各年の月(存在する場合)を表示し、次のように出力します。

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

日時(yyyy-mm-dd 00:00:00)の「date_posted」行があります。その上、月に1行、年に1行あります(これはばかげていることはわかっていますが、「date_posted」行を使用するだけではこれを行う方法を理解できませんでした。

私はこのトピックに関するいくつかの投稿を読みましたが、それは私のためにトリックをしていません。どんな助けでも大歓迎です!

4

4 に答える 4

1

単純な「ステート」マシンを使用して、年がいつ変わるかを検出する必要があります。

$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>";
}
于 2012-08-02T15:43:27.297 に答える
1
$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>";
}
于 2012-08-02T15:44:00.307 に答える
1

これは機能するはずです。結果をフェッチするときに、ビューの反復で簡単に使用できるように再構築すると便利な場合があります。

$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>");
}
于 2012-08-02T15:45:31.803 に答える
1

ショットを与える

$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>";
}
于 2012-08-02T15:45:35.643 に答える