[PHP-users 23124]Re: MYSQLからのデータ取得について

ALPHA alpha @ alpha.ne.jp
2004年 8月 29日 (日) 00:29:48 JST


新地と申します。

> 日記サイトを作っていまして、「誰が多く投稿しているかランキング」のような
> ものを作っているのですが、いまいち効率的なやり方が分からずに悩んでおります。
> ■実現したい表現
> 1位 Aさん 80件
> 2位 Bさん 60件
>    ↓
> 100位 Cさん 2件 //大体ベスト100位を想定。
> 以上のような結果を求めたいのです。
> データベースは、下記のように持っております。
> ----------------------------------------------
> |ユーザー名|日記タイトル|日記文章|日付|
> ----------------------------------------------
> 単純にひとりのユーザーの件数を求めるのであれば、
> SQLで、WHERE user = 'Aさん' でいいと思うのですが、
> これをいったん配列に入れて、重複を取り除いた後、
> ユニークなユーザー数分ループして、
> WHERE user = '○○さん'とSQLにアクセスすれば
> 求められると思うのですが、これが最適なのでしょうか。

count関数とgroupに関して調べてみるとよいのではないでしょうか?

ユーザー名のカラムをuserとして
$result = mysql_query("select user,count(user) as count from TABLE group by user");

while($obj = mysql_fetch_object($result)) {
	echo $obj->user,$obj->count,"<br>\n";
}

これでカウント数が取れるはずです。


> それとも一端、配列に全部入れて、
> For($i=0;$i<総件数:$i++){
> $row = mysql_fetch_array($result);
> If($row["user"] == 'Aさん'){
> 	$hit_point['Aさん']++;
> }else If($row["user"] == 'Bさん'){・・・
> とやるのがいいのでしょうか。
> これも効率が悪いような気がするのですが、

配列でやるのはとてつもなく重いです。



PHP-users メーリングリストの案内