登録したユーザーの情報はテーブル(User)に記録されています。
テーブル(User)のフィールドは以下の2つです。
()内がフィールド名です。
名前(Name) text
紹介人数(Count) text
ユーザーが友達を紹介するごとに(Count)が1増える仕組みです。
友達紹介ランキングベスト3を作ろうと思っているのですが
以下の記述ではページが表示されるのが大変重いです。
もっと軽く表示させるためにはどのような記述が最適でしょうか?
ご教授頂けると幸いです。
省略
$rs = mysql_query("SELECT Count FROM User order by Count desc limit 0,1");
$count = mysql_fetch_row($rs);
$rs2 = mysql_query("SELECT Count FROM User order by Count desc limit 1,1");
$count2 = mysql_fetch_row($rs2);
$rs3 = 同上 limit 2,1");
$count3 = mysql_fetch_row($rs3);
$name0 = mysql_query("SELECT Name FROM User order by Count desc limit 0,1");
$NAME1 = mysql_fetch_row($name0);
$name1 = mysql_query("SELECT Name FROM User order by Count desc limit 1,1");
$NAME2 = mysql_fetch_row($name1);
$name2 = 同上 limit 2,1");
$NAME3 = mysql_fetch_row($name2);
省略
1位$NAME1[0]<br>
紹介人数:$count[0]人
<hr>
2位$NAME2[0]<br>
紹介人数:$count2[0]人
<hr>
3位$NAME3[0]<br>
紹介人数:$count3[0]人
省略
こんな感じでどうでしょう。
SQLの発行は1回だけで済みます。
$rs = mysql_query("SELECT * FROM User order by Count desc limit 0,3"); $ccount = 1; while ($row = mysql_fetch_array($rs)) { echo "{$count}位 {$row['Name']}<br />"; echo "紹介人数:{$row['Count']人<hr />\n"; $count++; }
こんな感じでどうでしょう。
SQLの発行は1回だけで済みます。
$rs = mysql_query("SELECT * FROM User order by Count desc limit 0,3"); $ccount = 1; while ($row = mysql_fetch_array($rs)) { echo "{$count}位 {$row['Name']}<br />"; echo "紹介人数:{$row['Count']人<hr />\n"; $count++; }
回答ありがとうございました。
とても参考になりました。
こちらを利用させて頂きました。
ありがとうございました。
まずはSELECT文の発行を1回にしてみては?
$res = mysql_query( "SELECT `Name`,`Count` FROM `User` ORDER BY `Count` DESC LIMIT 0,3" );
while ( $row = mysql_fetch_assoc ( $res ) ) {
echo $row['Name'] . "…" . $row['Count'] . "人";
}
以下気になった点を。
・テーブル内にデータは何件あるの?
単純に「SELECTを6回発行してるから重い」のかどうか?
SQL部分だけの実行時間を測ってみるのはいかがでしょうか
・CountカラムはTEXT?
・同数の場合の処理は?
回答ありがとうございました。
とても参考になりました。
ありがとうございました。
回答ありがとうございました。
とても参考になりました。
こちらを利用させて頂きました。
ありがとうございました。