忘れないように記録しとこ

CodeigniterだってUnionを使ったSQLが書けちまうんだっ

環境

Codeigniter : 3.1.7

 

はじめに

前回、私がCodeingterでサブクエリを書くやり方を書きました。

私がCodeigniterでサブクエリを使ったSQLを書くときの方法

 

今回は、CodeigniterでUnionを書くやり方を書きます。

 

CodeigniterにはUnionのQuery Builderが存在しない

CodeigniterにはDBを操作する為のライブラリが用意されています。

大概の事ならこのライブラリを使えば解決します。

しかしCodeigniterにはUnionをする為のライブラリが存在しません。

 

query()使えば良くね?

まあ、そうなんですけどね。

query()使って、泥臭くSQLを記載すれば書けるは書けます。

でも、エスケープはどうするの?
escape()使って記載します?
でも、それソースコード見づらくないですか?好みの問題

 

サブクエリ使おうよ!

ここで前回書いた記事が生きてきます。

私がCodeigniterでサブクエリを使ったSQLを書くときの方法

 

例えばこう↓

// 読み込み
$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 BYLIMITなどが上手く動きません。

 

今日はこの辺でー

 

この記事が気に入ったら
いいね ! しよう

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください