プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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'];
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/12 19:43

考え方は2つ



1つは#1さんのようにPHPで処理する
order byしているので前の点数を使っているのはよいですね
そのたフラグで処理をする手もあると思います。

2つめはMySQLで処理する。
たとえば別テーブルでカテゴリの最低値、最高値をもたせて
INNERJOINしてカテゴリを付加した状態で得られれば
そのカテゴリをキーに処理ができます。
もちろんJOINしなくてもIFでカテゴリを付加することも
可能だとは思います
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/12 19:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!