カテゴリー : SELECT

【DooPHP】Group By 検索を使用する

doophp

doophp

DooPHPのFindでGroup Byでの検索ができないみたい、、、

ちょっとFramework変更してしまいましたが、
割と簡単に出来るようになったのでメモしておきます。

/dooframework/db/DooSqlMagic.php
の350行目あたりの
$sql =”SELECT {$sqladd['select']} FROM {$model->_table} {$sqladd['where']} {$sqladd['order']} {$sqladd['custom']} {$sqladd['limit']}”;
を下記に変更。customの位置を変更します。
$sql =”SELECT {$sqladd['select']} FROM {$model->_table} {$sqladd['where']} {$sqladd['custom']} {$sqladd['order']} {$sqladd['limit']}”;

こうすることでControllerのcustomを利用することができます。

$this->db()->find( $user,array(‘custom’=>’ group by name ‘,’desc’=>’id’));

なんで、orderとlimitの間にcustomがあるんだろう?
とりあえず応急処置としてはこれでいきます。

【MySQL】REGEXPの正規表現検索

MySQLはRDBMSなので、正規化すれば問題ございませんが、
既にテーブルのカラムにカンマ区切りのデータが入っていてデータが変更できない場合のクエリです。

idに1,10,11,111のようなデータが入っているときに1をLIKEで検索すると全て引っかかりますね。
SELECT * FROM table WHERE id LIKE ‘%1%’

そこでREGEXPにて検索すると正規表現のOR検索でできるので、
検索結果は一件のみ抽出されます。

■MySQL
SELECT * FROM table WHERE id REGEXP ‘^1$|^1,|,1$|,1,’

■CAKEPHP
$this->Table->find(‘all’, array(‘conditons’ => array(‘name REGEXP’ => ‘^1$|^1,|,1$|,1,’));