nomunomu0504.blog

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

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

サブクエリ

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

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

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

fuelPHPのクエリ発行

ORMを使う場合の例はhttp://fuelphp.jp/docs/1.9/packages/orm/crud.html#/subqueriesを参照。

Query Builderを使う場合、Query_Builder_Select::compile()を使うとサブクエリのSQLを文字列にすることができます。 ORMを使った例をQuery Builderで作成すると以下のように書き換えられます。

<?php
$sub_query = DB::select('author')
    ->from('articles')
    ->where('date', '<', time())
    ->where('draft', '=', 1)
    ->compile(Database_Connection::instance());
 
$query = DB::select()
    ->from('articles')
    ->where('author', '=', 16)
    ->or_where('author', DB::expr($sub_query));
 
$query->execute();

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