WordPressやSymfonyのTipsを中心にアニメや日常の出来事について語ります。
メニュー

【Symfony2】Doctrine2で行値構成子(行値式)が使えなかったので、対応策を考えた

この記事は約1分16秒で読めます

symfony-2
ゆっきー
ども、カフェブロガーの悠木です。 お気に入りのカフェはドトールコーヒーです。 14時からの限定スイーツ「シューシャポー」が大好きです。

久しぶりにSymfony2ネタです。
本当に困ったので、記事にしました。

IN句で複数列を指定して副問い合わせしたい

「(列1,列2) in(値1,値2)」という条件は、行値構成子(行値式)と呼ばれます。

Doctrine2ではこの行値式がサポートされていないようです。
SQL Serverでは未サポートと書かれているのは見かけました。

(サポートされていたら使い方を教えていただきたいです・・・)

上記のSQLをDoctrineで実行しようとしました。
だいぶ、省略してます。(原型がないです)

col1の重複行を削除して、col2の最小値行のみ取り出す。
ということをやりたかったわけです。

行値式が使えれば簡単だったのですが、この子は動いてくれませんでした。
出力されたSQLを直接SQLPlusで実行すれば動いてくれたので、Doctrineが対応していないんだなー。
という結論に至りました。

使えないものはしょうがないので、他に方法がないか考えました。
(ググりました)

代替案:EXISTS句を使う

行値式に代わる方法はいくつかあるようですが
今回はEXISTS句を採用しました。

うまい具合に動いてくれました。
(同じ結果を返してくれました)

テストデータは3万件ほどありましたが、
体感で速度は変わらなかったのでよかったです。

実際には下記のように書いております。

まとめ

EXISTS句で代用できてよかったです。
今まであんまり使うことなかったですが、大変お世話になりました。

もうひとつ別の問題はあったのですが、
次の記事で書こうと思います。

参考になったサイト

Symfony2おすすめ書籍

関連記事

  1. symfony2
  2. symfony2
  3. symfony2
  4. symfony2
  5. symfony2
  6. Symfony2 MonologからSlackにメッセージを送る

コメントをお待ちしております

PR

カテゴリー