のむログ

技術メモ / 車 / 音楽 / 雑記 / etc...

fuelPHPでサブクエリを実行する

f:id:nomunomu0504:20190411150719j:plain:w0

サブクエリ

サブクエリとは、複数のクエリを組み合わせて、目的のデータを抽出することです。クエリのネストを作成し内側のクエリを評価し、その評価値を用いて外側のクエリを評価します。

SELECT
    注文番号
FROM
    注文票
WHERE 商品コード = (
    SELECT
        商品コード
    FROM
        商品リスト
    WHERE 商品名 = 'ICE'
);

ここでの内側クエリとは()で囲まれた部分です。まずはここが評価され、その結果を用いて外側クエリが評価されます。

fuelPHPのクエリ発行

ORMはhttp://fuelphp.jp/docs/1.9/packages/orm/crud.html#/subqueriesを参照。

<?php
$sub_query = DB::select('商品コード')
    ->from('商品リスト')
    ->where('商品名', '=', 'ICE')
    ->compile(Database_Connection::instance());
 
$query = DB::select('注文番号')
    ->from('注文票')
    ->where('商品コード', '=', DB::expr($sub_query));
 
$query->execute();

サブクエリのSQL文字列がクオートやバッククオートで囲まれないようにするためには、DB::expr()を用います。