目次
環境
Codeigniter : 3.1.7
はじめに
前回、私がCodeingterでサブクエリを書くやり方を書きました。
https://www.kabanoki.net/1932
今回は、CodeigniterでUnionを書くやり方を書きます。
CodeigniterにはUnionのQuery Builderが存在しない
CodeigniterにはDBを操作する為のライブラリが用意されています。
大概の事ならこのライブラリを使えば解決します。
しかしCodeigniterにはUnionをする為のライブラリが存在しません。
query()使えば良くね?
まあ、そうなんですけどね。
query()
使って、泥臭くSQLを記載すれば書けるは書けます。
でも、エスケープはどうするの?
escape()
使って記載します?
でも、それソースコード見づらくないですか?(好みの問題
サブクエリ使おうよ!
ここで前回書いた記事が生きてきます。
https://www.kabanoki.net/1932
例えばこう↓
// 読み込み $subquery_init = $this->load->database('',TRUE); //クエリA $subQuery[] = $subquery_init->select('no', FALSE)->from('tableA')->get_compiled_select(); // 初期化 $subquery_init->reset_query(); //クエリB $subQuery[] = $subquery_init->select('no', FALSE)->from('tableB')->get_compiled_select(); // 初期化 $subquery_init->reset_query(); //クエリC $subQuery[] = $subquery_init->select('no', FALSE)->from('tableC')->get_compiled_select(); // 初期化 $subquery_init->reset_query(); // 配列を「) UNION (」で文字列結合 $unionQuery = join(') UNION (', $subQuery); $this->db->query("({$unionQuery}) ORDER BY no");
これでSQLは↓になる
(SELECT no FROM tableA) UNION (SELECT no FROM tableB) UNION (SELECT no FROM tableC) ORDER BY no
うん、とってもグットな気がします。(好みの問題
この時に注意しなければいけないのは、サブクエリを()で包むことです。
そうしないと、ORDER BY
やLIMIT
などが上手く動きません。
今日はこの辺でー