0

だからここに私の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>
    ";
}

私がやりたいことは、毎年出力している現在の代わりに1年だけ出力することであり、その年の各月に1つのエントリがあるため、同じ年の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>

これは、すべての結果を年ごとに並べ替えて、ユーザーが選択を使用して表示する年を選択できるようにするためです。

4

2 に答える 2

8

これを行うには多くの方法がありますが、おそらく最も簡単なのは次の方法です。

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

を使用DISTINCTすると、データベースは各値を 1 つだけ返します。そうすれば、PHP 側でデータを処理するリソースを無駄にする必要がなくなります。

于 2013-10-05T01:24:15.780 に答える
2

@トーマス・ケリーは上記の完璧な答えを出しました。

ただし、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>
    ";
}
于 2013-10-05T02:23:21.900 に答える