2012-06-13 210 views
14

我有以下的mysql查询。您能否告诉我如何以Codeigniter的方式编写相同的查询?在codeigniter中使用Mysql WHERE IN子句

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

没有使用子查询笨如我贴 –

+1

是的,我已成功地用它成功地在几分钟前.. :)谢谢:) –

+0

@raheelshan。你能否检查这篇文章? http://stackoverflow.com/q/11045611/1209690谢谢:) –

回答

25

中选择所有列时是可选的。这样
进入系统/数据库/ DB_active_rec.php 从这些功能

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这些功能都已经公开,所以你并不需要破解它们。

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

是不活跃的纪录,但就是笨的办法http://codeigniter.com/user_guide/database/examples.html 看到标准查询多个结果(数组版本)部分

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(“*”);当你从表

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

这完全适合我的需要,谢谢! – Nebri