次のmysqlクエリがあります。Codeigniter の方法で同じクエリを記述する方法を教えてください。
SELECT * FROM myTable
WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B')
AND code!='B'
次のmysqlクエリがあります。Codeigniter の方法で同じクエリを記述する方法を教えてください。
SELECT * FROM myTable
WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B')
AND code!='B'
これを行うには、codeigniter のサブクエリの方法を使用できます。これには、codeigniter をハックする必要があります。このよう
に system/database/DB_active_rec.php に移動します これらの関数から public または protected キーワードを削除します
public function _compile_select($select_override = FALSE)
public function _reset_select()
サブクエリの書き込みが利用可能になりましたそして今ここにアクティブなレコードを持つクエリがあります
$this->db->select('trans_id');
$this->db->from('myTable');
$this->db->where('code','B');
$subQuery = $this->db->_compile_select();
$this->db->_reset_select();
// And now your main query
$this->db->select("*");
$this->db->where_in("$subQuery");
$this->db->where('code !=', 'B');
$this->db->get('myTable');
そして、事は終わりました。乾杯!!!
注:サブクエリを使用している間は、使用する必要があります
$this->db->from('myTable')
それ以外の
$this->db->get('myTable')
クエリを実行します。
これも見て
この SQL を CodeIgniter のアクティブ レコードに書き直すにはどうすればよいですか?
注 : Codeigntier 3 では、これらの関数は既に公開されているため、ハッキングする必要はありません。
これを試してください:
$this->db->select("*");
$this->db->where_in("(SELECT trans_id FROM myTable WHERE code = 'B')");
$this->db->where('code !=', 'B');
$this->db->get('myTable');
注:$ this-> db-> select( "*"); テーブルからすべての列を選択する場合はオプションです
これを試して:
return $this->db->query("
SELECT * FROM myTable
WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B')
AND code!='B'
")->result_array();
アクティブなレコードではありませんが、codeigniter の方法ですhttp://codeigniter.com/user_guide/database/examples.html 複数の結果を持つ標準クエリ (配列バージョン) セクションを参照してください