web-dev-qa-db-ja.com

codeigniterでMysql WHERE IN句を使用する

次のmysqlクエリがあります。 Codeigniterの方法で同じクエリを書く方法を教えてください。

SELECT * FROM myTable 
         WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B') 
         AND code!='B'
17
black_belt

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では、これらの関数は既に公開されているため、ハッキングする必要はありません。

25
Muhammad Raheel
$data = $this->db->get_where('columnname',array('code' => 'B'));
$this->db->where_in('columnname',$data);
$this->db->where('code !=','B');
$query =  $this->db->get();
return $query->result_array();
17
areeb

これを試してください:

$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( "*");テーブルからすべての列を選択する場合はオプションです

7
Code Prank

これを試して:

return $this->db->query("
     SELECT * FROM myTable 
     WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B') 
     AND code!='B'
     ")->result_array();

アクティブなレコードではありませんが、コードイグナイターの方法です http://codeigniter.com/user_guide/database/examples.html 複数の結果を持つ標準クエリ(配列バージョン)を参照) セクション

0
mvpasarel