2013-10-05 51 views
0

是我的PHP代碼:擺脫重複的PHP一段時間,所以在這裏循環

$sql1 = "SELECT year FROM reports ORDER BY year DESC"; 
$res1 = mysql_query($sql1); 
while($row = mysql_fetch_array($res1)) { 
    $selectYear = " 
     <select id='select_year'> 
      <option value='".$row['year']."'>".$row['year']."</option> 
     </select> 
    "; 
} 

我希望它做的僅僅是輸出爲一年,而不是它現在正在做的這是每一年輸出並沒有什麼全年各月的一個條目,以便有12項與同一年,所以我的HTML是這樣的:

<select id='select_year'> 
    <option value='2013'>2013</option> 
    <option value='2013'>2013</option> 
    <option value='2013'>2013</option> 
    <option value='2013'>2013</option> 
    <option value='2012'>2012</option> 
</select> 

但是,這是我真正想要的:

<select id='select_year'> 
    <option value='2013'>2013</option> 
    <option value='2012'>2012</option> 
</select> 

這是按年排列所有結果,以便用戶可以使用select來選擇他們想要查看的年份。

+0

店的第一個結果在一個變量,並顯示它,當你在它下一次獲取,之前顯示其比作變量,如果比賽什麼都不做,否則,顯示和存儲 – Satya

+1

此外,請參閱[爲什麼不該我在PHP中使用mysql_ *函數嗎?](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 – Boaz

回答

8

有許多這樣做的方法,但最簡單的可能是:

$sql1 = "SELECT DISTINCT year FROM reports ORDER BY year DESC"; 

隨着DISTINCT,數據庫將只返回每個值之一。那麼你不必浪費PHP端的任何資源處理數據。

+0

這工作完美!謝謝! – user2701687

2

@Thomas Kelley在上面給出了完美的答案。

但是,如果你堅持PHP解決方案。你可以這樣做,如下所示。

$res1 = mysql_query($sql1); 
$placeHolder = ","; 
while($row = mysql_fetch_array($res1)) { 
    if (strpos($placeHolder , $row['year'])) 
     continue; 
    $placeHolder .= $row['year'] .','; 
    $selectYear = " 
     <select id='select_year'> 
      <option value='".$row['year']."'>".$row['year']."</option> 
     </select> 
    "; 
} 
+0

+1替代PHP。儘管不是將它添加到以逗號分隔的字符串列表中,而是將值推入數組,並使用'in_array()'來確定它是否已經存在。字符串比較可能會變得昂貴和不精確(例如,如果該值已包含逗號)。 –

+0

好點@托馬斯凱利。我仍然是一個新手。今天學點新東西。 – phpLearner