下記だとできないので、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
');
こんな感じ。



