11

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
4

3 に答える 3

21

それを行うにはいくつかの方法があります。ハックである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 句を使用する必要があります。
codeigniter 2 では _compile_select と _reset_select は保護されたメソッドであるためアクセスできません。
system/database/DB_active_rec.php の両方のメソッドの前にキーワードを削除する必要がある場合があります

こちらの記事も参考になります。

于 2013-01-10T06:25:43.513 に答える
5

CI3 では、エスケープに 4 番目のパラメーターを使用するだけです

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

SQL インジェクションを回避するために、サブクエリでパラメーターをエスケープすることを忘れないでください。

于 2016-11-22T13:19:08.977 に答える
0

このライブラリは、クエリ ビルダーでサブクエリを使用するのに役立ちます。このライブラリのドキュメントを参照してください。

クエリビルダーを使用したサブクエリ

于 2013-01-10T07:04:44.713 に答える