CakePHPで複数joinする方法 LEFT JOIN

joinsをarrayで複数定義すればOK。

           ‘joins’ => array(
                array(
                    ‘type’ => ‘LEFT’,
                    ‘table’ => ‘gp_lists’,
                    ‘alias’ => ‘GpList’,
                    ‘conditions’ => array(
                        ‘GpList.id = CpContent.gp_list_id’,
                    )
                ),
                array(
                    ‘type’ => ‘LEFT’,
                    ‘table’ => ‘cp_lists’,
                    ‘alias’ => ‘CpList’,
                    ‘conditions’ => array(
                        ‘CpList.gp_list_id = CpContent.gp_list_id’,
                    )
                ),
            ),

■参考サイト
自作自演 : CakePHP で join をやりたかったメモ。

CakePHPのsaveしたときにエラー無視する方法

第二引数に false を指定する。

$this->TestData->saveAll($items, false );

■参考サイト

 値のチェックにまつわるいろいろ: CakePHP のおいしい食べ方
 データを保存する :: モデル :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook 

MySQLでクロス集計する方法

■クロス集計で行数をカウント
SELECT `list_id`, FIELD(`category_id`, 10), FIELD(`category_id`, 11)  FROM `bookmarks` GROUP BY `list_id`;

■カウントした行数に値を掛けてクロス集計結果
SELECT `list_id`, SUM(FIELD(`category_id`, 10) * `count`), SUM(FIELD(`category_id`, 11) * `count`) FROM `bookmarks` GROUP BY `list_id`;

■参考サイト

 MySQLでクロス集計 日々是好日/ウェブリブログ