すごい。しかも curdate()を使うと例えば 10月20日にデータを作った場合、11月3日にそのビューを見るとなんとその日の日付 11月3日が適用されている。
つまり 10月20日の 90日前 ではなく、 今日 の 90日前 が自動計算される。
MYSQLは苦手意識があるのであんまり勉強したくなかった。
でもがんばって見てみたら mysql 5.0以降から ビューを作成できるとのこと。
Aテーブルとそのテーブルのビュー TMPビュー とする
MYSQLのビューとは
あらかじめ指定したフィールドや条件文で抽出した結果を表示しておく仮のテーブル。
一般的なmysql テーブルと全く同じように使える。
MYSQLのビューの更新
Aテーブルのデータを表示しているだけのTMPビュー。
だからAテーブルのデータを更新、削除、追加すれば TMPビューのデータも更新される。
逆にTMPテーブルのデータを更新、削除、追加すればAテーブルのデータも更新される。
どんな時に使うの?
例えばランキングを出したいとき。
90日前までのポイントを取得して、その合計を出したい。
・analys2_ranks ビューを 90 日前までのデータを取得し作成
・pointフィールドを合算して goukei フィールドに出す。
・goukei が多い順に並び変えて表示。
$this->Report = Classregistry::init('Report');
$this->Report->query('create view analys2_ranks as select id, sponcer_id , from_id , point , created from analys2_reports where date_add(created,interval 90 day) > curdate()');
$res = $this->Report->query('SELECT * , sum(Rank.point) as goukei
FROM analys2_ranks AS Rank
GROUP BY Rank.from_id
HAVING Rank.from_id ORDER BY goukei desc
');
また、 from_id の合計ポイントを取得したい場合は
$this->Rank = Classregistry::init('Rank');
$res = $this->Rank->find('all',array('conditions' => array('Rank.from_id' => 1) , 'fields' => array('sum(point) as sum_point')));



