人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

会員制php+mysqlに関する質問です。
登録したユーザーの情報はテーブル(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]人


省略

●質問者: xptree
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL name PHP SELECT USER
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● horonict
●40ポイント ベストアンサー

こんな感じでどうでしょう。

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++;
}
◎質問者からの返答

回答ありがとうございました。

とても参考になりました。

こちらを利用させて頂きました。

ありがとうございました。


2 ● SOBA
●30ポイント

まずは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?

・同数の場合の処理は?

◎質問者からの返答

回答ありがとうございました。

とても参考になりました。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ