CakePHPでEXISTSを使ってfind検索

DISTINCT使うよりは、EXISTS使った方が早くなりますよね?

ぶっちゃ、管理人的には時と場合によってDISTINCTも

使えるとは思うのですが、暗黙のソートがある分やっぱりEXISTSを使った方がいいですね。


ここでいうDISTINCTの暗黙のソートとは、条件に一致する行を取り出して
その後、暗黙のソート処理を行って重複行を削除するみたいです。
以後、その繰り返し。。それは重たくなりますね。



ただCakePHPでEXISTSをどうやって使えばいいのか、悩みどころです。

フレームワークというのはこういう時にやっかいだなと感じちゃいます。

かといって、該当箇所だけquery()で直SQL書くのもなんだかなーと。


で、いろいろ調べていくとありました。


前提条件
CakePHP1.3
Postgres8.1


ようはconditionsの中にぶち込んでしまえ論です。

このサンプルはあまり意味がないですが一応。。

Columnテーブルに複数のColumnInfoテーブルが紐付いておりColumn.idにて重複行削除。
※Column.idが主キー
※ColumnInfo.column_idが外部キー


$options = array();
$options['conditions'] = array(
	'SELECT * FROM column_infos AS ColumnInfo WHERE Column.id = ColumnInfo.column_id'
);

$res = $this->Column->find('all', $options);


$resが思い通りの値になったかなと思います。


コメントを残す




Menu

HOME

 TOP