Codeigniterだってサブクエリを使ったJOINが使えちまうんだっ

2018年4月25日

環境

Codeigniter : 3.1.8

 

はじめに

前回、CodeingterでUnionを使う記事を書きました。

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

今回は、Codeigniterでもサブクエリを使ったJOINが使えるよっていうのを書きます。

もっとも内容はUNIONの時とそんなに変わりませんが・・・

 

サブクエリにはQuery Builderを使う!

ここに書いてあります(ステマ

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

サブクエリを使ったJOINを書く

まず厄介なことに、Query Builderのjoin()を使うと、サブクエリがエスケープされてしまいます。
※ 正常な動作です。

そもそもサブクエリを生成するときにエスケープを行っているので、もう一度エスケープを行う必要はありません。

そこで、join()のエスケープを止めます。

止め方は、ドキュメントを参照

https://www.codeigniter.com/user_guide/database/query_builder.html?highlight=join#CI_DB_query_builder::join

第4引数でエスケープの有無を設定できるので、ここにFALSEを指定してやります。
あとはもう終わったようなものです。


// 読み込み
$subquery_init = $this->load->database('', TRUE);

//サブクエリ
$subQuery = $subquery_init->select('no', FALSE)->from('tableA')->get_compiled_select();
// 初期化
$subquery_init->reset_query();


// JOINを設定
// 第4引数にFALSEを設定
$this->db->join("($subQuery) AS subT", 'mainT.no = subT.no', 'left', FALSE);

 

いかがでしょうか?

今日はこの辺でー

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-CodeIgniter
-, ,