笨JOIN(SELECT查询(Codeigniter JOIN (SELECT query)

2019-08-06 06:32发布

它可以生成由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

Answer 1:

那么有一对夫妇的做这件事的方式。 一种方法是在这里是一个黑客攻击。

我怎么能改写这个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两种方法之前删除关键字

此文章是有用的。



Answer 2:

在CI3,只需使用逃生的第四个参数

$this->db->from('table')
->join('SELECT id from table2 where something=%s) as T2'),'table.id=T2.id', 'LEFT',NULL)
->get()->row();

不要忘了逃跑的参数在你的子查询,以避免SQL注入。



Answer 3:

这个库可以帮助您使用子查询与查询生成器对这个库的文档外观

与查询生成器子查询



文章来源: Codeigniter JOIN (SELECT query
标签: codeigniter