2011年03月08日

cakePHP で自己結合。ランキング取得。

お願いします♪いいねとかつぶやいたりして下さい
 
自分のテーブル内の順位を求めたい場合

1 まず、自分のポイントを求める。
2 自分より多いポイントを持つユーザーの数を調べる。
2 の結果に +1 する。

これで順位を取得できる。

$tmpPoint = $this->User->find('first',array('conditions' => array('id' => $user_id) , 'fields' => 'count_all'));
			$rank = $this->User->find('count',array('conditions' => array('count_all >' => $tmpPoint['User']['count_all'])));
$rank++;



追記、日付を絞り込んだり where句を使い対場合は
下記だとできないので、MYSQLのビューを使えばいい。

http://www.hideblog.net/nikkis/show/230/



迷うこと、早3年。
やっとできました。

バーチャルフィールド使ってもいまいちうまくいかず。
自己結合でググってもなかなか出てこず。

条件
User テーブルに関連した Rate モデル。(1対多の場合)
Rateモデル の user_id をキーに rate の値を合計し、順位付けしたい。



とりあえず、合計値1位から順に表示するだけ


$res = $this->Rate->query('SELECT Rate1.user_id , sum(Rate1.rate) as goukei
						FROM ageha_rates AS Rate1
						GROUP BY Rate1.user_id
						HAVING Rate1.user_id ORDER BY goukei desc
				   ');


IN (***) で指定したユーザーの合計値のみ取得


$res = $this->Rate->query('SELECT Rate1.user_id , sum(Rate1.rate) as goukei
						FROM ageha_rates AS Rate1
						GROUP BY Rate1.user_id
						HAVING Rate1.user_id IN (150,210)
						ORDER BY goukei desc
				   ');


トップ5位のみ取得 LIMIT句


$res = $this->Rate->query('SELECT Rate1.user_id , sum(Rate1.rate) as goukei
						FROM ageha_rates AS Rate1
						GROUP BY Rate1.user_id
						HAVING Rate1.user_id ORDER BY goukei desc LIMIT 5
				   ');


トップ6~10位のみ取得 LIMIT + OFFSET句


$res = $this->Rate->query('SELECT Rate1.user_id , sum(Rate1.rate) as goukei
						FROM ageha_rates AS Rate1
						GROUP BY Rate1.user_id
						HAVING Rate1.user_id ORDER BY goukei desc LIMIT 5 OFFSET 5
				   ');


こんな感じ。
関連するタグ: PHP cakephp MYSQL
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ