2011年02月15日

やっとvirtualfieldsを使った並び変えができたぁぁぁぁ!

お願いします♪いいねとかつぶやいたりして下さい
 
cakephpで順位を求める方法
$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);



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




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




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