タグ : SELECT

【DooPHP】db->findで検索(SELECT)

db->findを使用して、検索するときのメモ。

■パターン1 Whereを個別に記述する方法。
このパターンは条件を指定する際に、見やすく書くことができますが、
条件の追加は全てANDになってしまいます。

Doo::loadModel(‘User’);
$user = new User;
$user->login_id = ‘aaa’;
$result = $this->db()->find( $user ,array(‘order by’=>’id’));

■パターン2 Whereをまとめて記述する方法。
このパターンは条件を直接続けて書く事ができます。
条件が多い場合は、見づらくなってしまいますが、
OR構文や複雑な条件指定の際に使用できます。

Doo::loadModel(‘User’);
$user = new User;
$result = $this->db()->find( $user ,array(‘where’=>’login_id=”aaa”‘,’order by’=>’id’));

【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,’));

【MySQL】重複している行のみ表示させる

重複している行を検索するときのSQL

SELECT *
FROM テーブル名
WHERE 列A
IN (
SELECT 列A
FROM テーブル名
GROUP BY 列A
HAVING count( * ) >1
) ORDER BY 列A;