17

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

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

5 回答 5

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')

运行查询。
也看这个

如何将此 SQL 重写到 CodeIgniter 的活动记录中?

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

于 2012-06-14T10:44:04.183 回答
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();
于 2013-04-18T14:20:11.193 回答
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("*"); 当您从表中选择所有列时是可选的

于 2012-06-14T08:36:30.873 回答
1

试试这个:

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

于 2012-06-13T21:20:12.577 回答
0

您可以使用更简单的方法,同时仍使用活动记录

$this->db->select("a.trans_id ,a.number, a.name, a.phone")
$this->db->from("Name_Of_Your_Table a");
$subQueryIn = "SELECT trans_id FROM Another_Table";
$this->db->where("a.trans_id in ($subQueryIn)",NULL);
于 2021-10-14T06:44:39.940 回答