它可以生成由CI查询生成器类下面的查询?
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
它可以生成由CI查询生成器类下面的查询?
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
那么有一对夫妇的做这件事的方式。 一种方法是在这里是一个黑客攻击。
我怎么能改写这个SQL到CodeIgniter的活动记录?
这另一种方法是非常简单的。
$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');
有些点一下。
你一定因为GET运行查询的子查询from子句中使用。
在笨2 _compile_select和_reset_select无法访问,因为他们是受保护的方法。
您可以在系统/数据库/ DB_active_rec.php两种方法之前删除关键字
此文章是有用的。
在CI3,只需使用逃生的第四个参数
$this->db->from('table')
->join('SELECT id from table2 where something=%s) as T2'),'table.id=T2.id', 'LEFT',NULL)
->get()->row();
不要忘了逃跑的参数在你的子查询,以避免SQL注入。
这个库可以帮助您使用子查询与查询生成器对这个库的文档外观
与查询生成器子查询