• ベストアンサー

mysqlのスマートな書き方

MySQL5.1とPHP5を使っています。 phpからmysqlのtestテーブルにアクセスして点数順に生徒名一覧を作成したいと思っています。 イメージとしてはこのような感じです。○○○は名前になります。 90点以上 ○○○ ○○○ 80点以上 ○○○ ○○○ ○○○ 70点以上 ○○○ ○○○ ○○○ ○○○ このような一覧を表示するため、下記のように作成したところ上記のような表示をしてくれました。 しかしながら、同じmysql_queryを何度も使っていますし、DBに負担が掛かりそうな気がします(本当に負荷があるのかは分かりませんが・・・) もっとスマートな書き方はないものでしょうか。 よろしくお願い致します。 echo "90点以上"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if ($res['tensu'] >= 90){ echo $res['name']; echo "<br>" ; } } echo "80点以上~90点未満"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($res['tensu'] >= 80 and $res['tensu'] < 90 ){ echo $res['name']; echo "<br>" ; } } echo "70点以上~80点未満"; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($res['tensu'] >= 70 and $res['tensu'] < 80 ){ echo $res['name']; echo "<br>" ; } }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

やりたいことを「条件を満たす点数と点数の間に見出しをつけたい」と考えて 以下のようなプログラムではどうでしょうか? $mae_no_tensu = 999; $rs = mysql_query("select * from test where kamoku = '1' order by tensu desc LIMIT 0, 100;",$conn); while($res = mysql_fetch_array($rs, MYSQL_ASSOC)){ if($mae_no_tensu == 999 && $res['tensu'] >=90){ echo "90点以上"; echo "<br>" ; } elseif($mae_no_tensu >= 90 && $res['tensu'] >=80){ echo "80点以上~90点未満"; echo "<br>" ; } elseif($mae_no_tensu >= 80 && $res['tensu'] >= 70){ echo "70点以上~80点未満"; echo "<br>" ; } if($res['tensu'] >= 70){ echo $res['name']; echo "<br>" ; } $mae_no_tensu = $res['tensu']; }

satoabc
質問者

お礼

お礼が遅くなってしまい申し訳ありませんでした。 どうもありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

考え方は2つ 1つは#1さんのようにPHPで処理する order byしているので前の点数を使っているのはよいですね そのたフラグで処理をする手もあると思います。 2つめはMySQLで処理する。 たとえば別テーブルでカテゴリの最低値、最高値をもたせて INNERJOINしてカテゴリを付加した状態で得られれば そのカテゴリをキーに処理ができます。 もちろんJOINしなくてもIFでカテゴリを付加することも 可能だとは思います

satoabc
質問者

お礼

お礼が遅くなってしまい申し訳ありませんでした。 どうもありがとうございました。