在codeigniter中使用Mysql WHERE IN子句

时间:2012-06-13 21:07:37

标签: codeigniter codeigniter-2

我有以下mysql查询。您能否告诉我如何以Codeigniter的方式编写相同的查询?

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

4 个答案:

答案 0 :(得分:25)

您可以使用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')
运行查询的

也看这个

How can I rewrite this SQL into CodeIgniter's Active Records?

注意:在Codeigntier 3中,这些功能已经公开,因此您无需破解它们。

答案 1 :(得分:17)

$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();

答案 2 :(得分:7)

试试这个:

$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(" *");从表

中选择所有列时,它是可选的

答案 3 :(得分:0)

试试这个:

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 请参阅具有多个结果的标准查询(数组版本)部分