2010年08月30日

paginate で virtual field

お願いします♪いいねとかつぶやいたりして下さい
 
cakephp1.3 から virtual field というものがあるらしい。

どんなときに使うのかというと、
1 対 多 になっている関係の時、その1ユーザーごとの

・何度試験を受けたか
・最高点
・最低点
・合計点
・平均点



を知りたい場合などに大変便利だ。

まぁ、ここまでできればpaginateもほぼ完璧と言えよう。

そこで、今回はとりあえずコントローラーでの設定だけをメモる。
paginaotorを使えば virtual field でsortすることができるらしい。
それは次の回で。

全ユーザーが何度試験を受けたかをバーチャルフィールドにて取得


$this->paginate = array('User' =>
	array(
		 
		  'limit' => 10,
		  'order' => array('User.id' => 'desc'),
		  'joins' => array(
		  array('type' => 'inner', 'alias' => 'Shiken', 'table' => 'hideblog_shikens',
				'conditions' => 'User.id = Shiken.user_id')
			),
		
		  'group' => array('User.id'),//これが重要。ここでまとめないと、一つのテストに対して同じユーザーが何度も表示される。
		  'page' => 1)
	);

$this->User->virtualFields = array('shiken_count' => 'count(Shiken.id)'); // SQL 発行前にバーチャルフィールド設定
$res = $this->paginate('User');



全ユーザーの合計スコアをバーチャルフィールドにて取得


$this->paginate = array('User' =>
	array(
		 
		  'limit' => 10,
		  'order' => array('User.id' => 'desc'),
		  'joins' => array(
		  array('type' => 'inner', 'alias' => 'Shiken', 'table' => 'hideblog_shikens',
				'conditions' => 'User.id = Shiken.user_id')
			),
		
		  'group' => array('User.id'),//これが重要。ここでまとめないと、一つのテストに対して同じユーザーが何度も表示される。
		  'page' => 1)
	);




全ユーザーの試験を受けた回数、最高点、最低点、合計得点、平均点 を取得


$this->paginate = array('User' =>
				array(
					  'limit' => 10,
					  'order' => array('User.id' => 'desc'),
					  'joins' => array(
                      array('type' => 'inner', 'alias' => 'Shiken', 'table' => 'hideblog_shikens',
                            'conditions' => 'User.id = Shiken.user_id')
                    	),
					
					  'group' => array('User.id'),//これが重要。ここでまとめないと、一つのテストに対して同じユーザーが何度も表示される。
					  'page' => 1)
				);
			
			
			$this->User->virtualFields = array(
				//そのユーザーが今まで取得した
				'shiken_count' => 'count(Shiken.id)',//試験を受けた回数
				'shiken_saikouscore' => 'max(Shiken.score)',//最高点
				'shiken_saiteiscore' => 'min(Shiken.score)',//最低点
				'shiken_goukeiscore' => 'sum(Shiken.score)/count(Shiken.id)',//合計得点
				'shiken_heikinscore' => 'sum(Shiken.score)/count(Shiken.id)'//平均点を取得 (試験の合計点 / 受けた試験の回数)
			); 


こんな感じでどうよ。
参考:
http://d.hatena.ne.jp/hiromi2424/20100204/1265274976
ありがとうございました!
関連するタグ: PHP cakephp MYSQL
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




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




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