東京うぇ部

PHPをメインにしたプログラム情報共有サイト

CakePHP

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が思い通りの値になったかなと思います。

コメントを残す




このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事