やかんブログ

[Symfony] PropelでSTRAIGHT_JOINヒントを使う

2009年02月04日(水)09:00|谷口

谷口です。

今回はかなりの小ネタです。 CriterionでaddJoinするとき、第三引数でJOINする方式を指定することができるのですが、STRAIGHT_JOINの指定をサポートしていません。(そもそもヒントですしね。。。) Ja/Users/Documentation/1.3/Criteria – Propel – Trac

以下のJOINタイプがサポートされています: Criteria::LEFT_JOIN Criteria::RIGHT_JOIN Criteria::INNER_JOIN デフォルトのJOINタイプは暗黙の(implicit)joinになります。これはINNER JOINと同じ効果がありますがSQLレベルでは違う書き方になっています。

ですが、実は文字列で指定すれば、STRAIGHT_JOINを指定することが可能です。例えば、Table1とTable2をTable1.idとTable2.table_1_idでSTRAIGHT_JOINする場合、下記のようにすることで実現できます。 $c = new Criteria; $c->addJoin(Table1Peer::ID, Table2Peer::TABLE1_ID, 'STRAIGHT_JOIN'); $result = Table1Peer::doSelect($c);

生成されるSQL文は下記のようになります。

SELECT table1.ID, table1.COLUMN FROM table1 STRAIGHT_JOIN table2 ON (table1.ID=table2.TABLE1_ID)

※MySQL4系ではsyntax errorになります。 MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.1.1 JOIN 構文 MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.7.1 JOIN 構文

と、今回は小ネタでしたが、クエリチューニングが必要なケースで活躍すると思います。

この記事に関するお問い合わせはこちら

ページの先頭へ