- ベストアンサー
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>" ; } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
やりたいことを「条件を満たす点数と点数の間に見出しをつけたい」と考えて 以下のようなプログラムではどうでしょうか? $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']; }
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
考え方は2つ 1つは#1さんのようにPHPで処理する order byしているので前の点数を使っているのはよいですね そのたフラグで処理をする手もあると思います。 2つめはMySQLで処理する。 たとえば別テーブルでカテゴリの最低値、最高値をもたせて INNERJOINしてカテゴリを付加した状態で得られれば そのカテゴリをキーに処理ができます。 もちろんJOINしなくてもIFでカテゴリを付加することも 可能だとは思います
お礼
お礼が遅くなってしまい申し訳ありませんでした。 どうもありがとうございました。
お礼
お礼が遅くなってしまい申し訳ありませんでした。 どうもありがとうございました。