CI Query Builder类可以生成以下查询吗?
SELECT name
FROM table1 t1
JOIN
(SELECT ID FROM table2 ORDER BY id LIMIT 5) t2
ON t2.id=t1.t2_id
WHERE t1.id>5
Run Code Online (Sandbox Code Playgroud)
Muh*_*eel 18
那么有几种方法可以做到这一点.一种方法是这里是一个黑客.
如何将此SQL重写为CodeIgniter的Active Records?
这种方式很简单.
$this->db
->select('ID')
->from('table2')
->order_by('id')
->limit('5');
$subquery = $this->db->_compile_select();
$this->db->_reset_select();
$query = $this->db
->select('t1.name')
->from('table1 t1 ')
->join("($subquery) t2","t2.id = t1.t2_id")
->get('table1 t1');
Run Code Online (Sandbox Code Playgroud)
关于它的一些观点.
您必须在子查询中使用from子句,因为get运行查询.
在codeigniter 2中,无法访问_compile_select和_reset_select,因为它们是受保护的方法.
您可能必须在system/database/DB_active_rec.php中的两个方法之前删除关键字
这篇文章也很有用.
小智 5
在CI3中,只需使用第四个参数进行转义
$this->db->from('table')
->join('SELECT id from table2 where something=%s) as T2'),'table.id=T2.id', 'LEFT',NULL)
->get()->row();
Run Code Online (Sandbox Code Playgroud)
不要忘记转义子查询中的参数以避免 SQL 注入。
| 归档时间: |
|
| 查看次数: |
19916 次 |
| 最近记录: |