データベース操作では、多くの場合、他のテーブルから取得したデータに基づいて条件付き選択を実行する必要があります。 MySQL の NOT IN サブクエリは、サブクエリに行が存在しないことに基づいてプライマリ クエリから行を除外する方法を提供します。
CodeIgniter の実装
で説明されている MySQL クエリを複製するには質問:
SELECT *<br>FROM certs<br>WHERE id NOT IN (SELECT id_cer FROM revokace);<br>
CodeIgniter のクエリ ビルダー メソッドを使用すると、次のアプローチを使用できます。
$this->db->select('*') ->from('certs') ->where('`id` NOT IN (SELECT `id_cer` FROM `revokace`)', NULL, FALSE);</p> <p>where() メソッドを使用すると、任意の文字列を直接渡すことができ、クエリを実行し、CodeIgniter のエスケープ メカニズムとの潜在的な競合を回避します。ただし、SQL インジェクション攻撃を防ぐために、ユーザー指定の入力でこのアプローチを使用する場合は注意することをお勧めします。</p> <p><strong>最適化されたサブクエリ ライブラリ</strong></p> <p>または、特殊なサブクエリの利用を検討してください。コードの可読性を高め、複雑なクエリを簡素化できるライブラリ。与えられた例は次のように変換されます:</p> <pre class="brush:php;toolbar:false">$this->db->select('*') ->from('certs') ->where('id', $this->subquery->subquery('where_in', function ($subq) { $subq->select('id_cer') ->from('revokace'); }, 'id', FALSE));
このライブラリはサブクエリの構築を簡素化し、より柔軟で表現力豊かな SQL ステートメントを可能にします。直接文字列アプローチを選択する場合でも、ライブラリを利用する場合でも、これらのメソッドを使用すると、CodeIgniter で NOT IN サブクエリを効果的に実装できます。
以上がCodeIgniter のクエリ ビルダーで NOT IN サブクエリを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。