2012-08-02 217 views
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 

我有一個「date_posted」行是datetime(yyyy-mm-dd 00:00:00)。 最重要的是,我有1行月和1年(我知道這是愚蠢的,但我無法弄清楚如何通過只使用「date_posted」行做到這一點。這個話題,但它沒有這樣做的伎倆,我 任何幫助是極大的讚賞

+0

因爲你想剛剛打印出來的每年一次,我可能會建議你將數據存儲到一個數組,然後再輸出,而陣列 – lusketeer 2012-08-02 15:40:25

+0

在循環或者,只需將'$ year'和'$ month'的前一個值存儲在變量中,並且只在它們更改時纔打印出來;你可能還想在查詢中做一個'SELECT DISTINCT year,month',這樣你就可以獲得唯一的值,並且只需要檢索你正在查找的字段。 – andrewsi 2012-08-02 15:46:29

回答

1

這應該起作用。當獲取結果時,有時候是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

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>"; 
} 
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>"; 
} 
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>"; 
}