$this->virtualFields = array(
//そのユーザーが今まで取得した
'vrate' => 'sum(Rate.rate)',//試験を受けた回数
);
$this->contain();
//ユーザー全員の順位を求める
$fields = array(
//年齢認証済み
'conditions' => array('User.agecheck' => 1),
'fields' => array(
'User.id',
'User.vrate'
),
'limit' => 9,
'order' => array('User__vrate desc'),
'joins' => array(
array('type' => 'INNER',
'table' => $this->tablePrefix.'rates',
'alias' => 'Rate',
'conditions' => array('User.id = Rate.user_id'),
),
),
//グループ化して同じデータを取得しないようにする
'group' => array('User.id'),
);
$res = $this->find('all', $fields);
これで、上位9 人の rate.rate の合計値をランキング順に取得できるので、
このIDを元にIN句でユーザーを取得するといいかも。
これはうれしい。絶対無理だと思ってたのに。
これでafterFindでごりごりやらなくて済む。
Userモデル 1
Attachmentモデル 多
Girlモデル 1
Rateモデル 多
4つのモデルを結合。Rateモデルrateフィールドの合計値順に並び変えて取得する方法。
ただ、UserモデルとAttachmentモデル、Girlモデル、Rateモデルの全てをアソシエーションをしようとするとバグる(合計値が。)ので、Attachmentモデルは Girl モデルに連結させることにした。
だめだ・・・。
sumの値がおかしくなる。
よって、以下は使い物にならず。
$this->virtualFields = array(
//そのユーザーが今まで取得した
'vrate' => 'sum(Rate.rate)',//試験を受けた回数
);
$fields = array(
//年齢認証済み
'conditions' => array('User.agecheck' => 1),
'fields' => array(
'User.id',
'User.name',
'User.birthday',
'User.id',
'Girl.profile',
'User.vrate'
),
'limit' => 50,
'order' => array('User.id desc'),
'joins' => array(
array('type' => 'INNER',
'table' => $this->tablePrefix.'girls',
'alias' => 'Girl',
'conditions' => array('User.id=Girl.user_id'),
'joins' => array('type' => 'INNER',
'table' => $this->tablePrefix.'attachments',
'alias' => 'Attachment',
//女の子の写真を持っている
'conditions' => array('Attachment.alternative' => 'girlphoto','User.id=Attachment.foreign_key'),
),
),
array('type' => 'INNER',
'table' => $this->tablePrefix.'rates',
'alias' => 'Rate',
'conditions' => array('User.id = Rate.user_id'),
),
),
//グループ化して同じデータを取得しないようにする
'group' => array('User.id'),
);
$fields['order'] = array('User__vrate desc');
$res = $this->find('all', $fields);
これでいける。



