会員制サイトphp+mysqlに関する質問です。

登録したユーザーの情報はテーブル(User)に記録されています。
テーブル(User)のフィールドは以下の4つです。
()内がフィールド名です。

会員コード(UserCD) text
パスワード(Pass) text
ニックネーム(Name) text
友達紹介人数(Friend) int 11

ユーザーが友達を紹介するたびに(Friend)の数値が1増えます。

friend.phpにアクセスすると"紹介人数の最も多いユーザーのニックネームと紹介人数"が
表示されるようにしたいです。
(上位5人を表示)

この場合の友達紹介ランキングBEST5の作成方法を教えてください。
よろしくお願い致します。

MySQL - 5.0.45

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2009/03/21 18:30:16
  • 終了:2009/03/23 22:06:43

ベストアンサー

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/03/21 19:20:22

ポイント65pt

下記ではどうでしょう。MySQL 関数 を利用しています。

スクリプトは UTF-8 で保存してください。

また、mysql_connect, mysql_select_db の部分は、ご利用のDB名、MySQLホスト名、ユーザー名、パスワードを設定してください。

<?php
echo <<< EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>友達紹介ランキングBEST5</title>
</head>
<body>
<table border="1">
<tr>
<th>ニックネーム</th>
<th>友達紹介人数</th>
</tr>

EOF;
$con = @mysql_connect('MySQLホスト', 'ログインユーザー', 'パスワード') or die('データベース接続エラー');
mysql_select_db('データベース名', $con);

//countを調べる
$sql = 'select * from User order by Friend desc limit 5;';
$res = mysql_query($sql, $con);

while ($row = mysql_fetch_array($res)) {
echo <<< EOF
<tr>
<td>{$row['Name']}</td>
<td>{$row['Friend']}</td>
</tr>

EOF;
}
mysql_close($con);

echo <<< EOF
</table>
</body>
</html>

EOF;
?>
id:xptree

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

ソースを書いていただいてとても助かりました。

紹介人数が見事表示されるようになりました。

ただ、ニックネームが英数字の場合は表示されるのですが

日本語の場合は空白になってしまい何も表示されません。

もともとphpMyAdminから閲覧すると日本語が文字化けしていました。

¤Æ¤Ä¤ä

¥Ò¥í

¥³¥Ö¥¯¥íÂç¹¥¤­

↑このような感じです…

あとはニックネームが表示されれば完璧なのですが

どうすればよいでしょうか…

ご教授頂けたら幸いです。

2009/03/21 20:13:01

その他の回答(2件)

id:kent0608 No.1

kent0608回答回数220ベストアンサー獲得回数232009/03/21 19:11:49

ポイント5pt

ORDER BYとLIMITを組み合わせたSQLを投げてください

http://www.rfs.jp/sb/sql/03/03.html#LIMIT

返された結果をfriend.phpの内部処理で整形して表示すればOKです

id:xptree

ありがとうございました

2009/03/21 20:13:26
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/03/21 19:20:22ここでベストアンサー

ポイント65pt

下記ではどうでしょう。MySQL 関数 を利用しています。

スクリプトは UTF-8 で保存してください。

また、mysql_connect, mysql_select_db の部分は、ご利用のDB名、MySQLホスト名、ユーザー名、パスワードを設定してください。

<?php
echo <<< EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>友達紹介ランキングBEST5</title>
</head>
<body>
<table border="1">
<tr>
<th>ニックネーム</th>
<th>友達紹介人数</th>
</tr>

EOF;
$con = @mysql_connect('MySQLホスト', 'ログインユーザー', 'パスワード') or die('データベース接続エラー');
mysql_select_db('データベース名', $con);

//countを調べる
$sql = 'select * from User order by Friend desc limit 5;';
$res = mysql_query($sql, $con);

while ($row = mysql_fetch_array($res)) {
echo <<< EOF
<tr>
<td>{$row['Name']}</td>
<td>{$row['Friend']}</td>
</tr>

EOF;
}
mysql_close($con);

echo <<< EOF
</table>
</body>
</html>

EOF;
?>
id:xptree

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

ソースを書いていただいてとても助かりました。

紹介人数が見事表示されるようになりました。

ただ、ニックネームが英数字の場合は表示されるのですが

日本語の場合は空白になってしまい何も表示されません。

もともとphpMyAdminから閲覧すると日本語が文字化けしていました。

¤Æ¤Ä¤ä

¥Ò¥í

¥³¥Ö¥¯¥íÂç¹¥¤­

↑このような感じです…

あとはニックネームが表示されれば完璧なのですが

どうすればよいでしょうか…

ご教授頂けたら幸いです。

2009/03/21 20:13:01
id:pahoo No.3

pahoo回答回数5960ベストアンサー獲得回数6332009/03/21 20:46:59

ポイント10pt

日本語の場合は空白になってしまい何も表示されません。

MySQL側の日本語文字コード設定が間違っていると思われます。登録時に文字化けを起こしている可能性が高いと思います。

対応策は、下記の記事を参考にしてください。


参考サイト

id:xptree

参考になりました。

また、特定の順位のみ表示

10位の人は○人紹介している

100位の人は○人紹介している

このように特定の順位のFriend数を表示させたい場合はどうすればよいでしょうか?

また、紹介人数の総数

全レコードのFriendの数値合計を表すにはどうしたらよいでしょうか?

質問ばかりになってしまい申しわけありません。

ご存知でしたらご教授いただけると幸いです。

よろしくお願い致します。

2009/03/22 17:23:09
  • id:pahoo
    #3のコメントについて:
    最初のご質問とまったく性質の異なる内容ですので、別の質問を立てていただいた方がよろしいかと存じます。
  • id:xptree
    そうですね。
    時間が無かったのでまとめて書きました。
    都合があえば新トピを立てます。

    あとひとつ言い忘れていたのですが、
    これでは順位が表示されてないのですが
    順位が表示されるにはどうしたらよいですか?

    1位 Name Friend
    2位 Name Friend

    よろしくお願い致します

  • id:pahoo
    > これでは順位が表示されてないのですが
    > 順位が表示されるにはどうしたらよいですか?

    遅くなりましたが、やり方だけアドバイスします。
    PHPで順位をカウントしてください。
    具体的には、#1で示したソースの while ループの中で順位を持つ変数を1ずつ増加させていけばいいでしょう。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません