databaseの接続設定は済んでいる前提
$subQuery = $this->db->select('count(*) as column_count, sample_id')->get_compiled_select('table_a'); $this->db->select('*')->join("({$subQuery}) AS table_a", 'table_a.sample_id = samples.id', 'left', false); $query = $this->db->get('samples');
get()
ではなく、get_compiled_select()
を使用することでクエリを実行しない。get_compiled_select()
の第2引数がデフォルトtrue
なので$this->db->reset_query()
を実施してくれる。(正しくは_reset_select()
)$this->db->from('table')
でやる場合はサブクエリの後に$this->db->reset_query()
を呼んであげる必要がある。
個人的にはget_compiled_select()
で済ませる方がシンプルなので好きです。
※
上記コードはサブクエリとの join()
メソッドで第4引数のエスケープを false
にしているので場合によってはSQLインジェクションが発生します。
サブクエリでjoinしてあげるクエリはあくまで CodeIgniter の QueryBuilder で組み立てた文字列を使用するようにしましょう!
参考記事
codeigniter.jp www.kabanoki.net
株式会社エイルシステムではWebエンジニア・モバイルアプリエンジニアを募集しています。
実務経験がなくてもOKです。ご興味のある方は弊社HPよりご連絡ください。