在数据库操作中,通常需要根据从其他表检索的数据来执行条件选择。 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);
where() 方法允许直接传递任何要合并到查询中的字符串,避免与CodeIgniter 的转义机制。但是,建议在将此方法与用户提供的输入一起使用时要小心,以防止 SQL 注入攻击。
优化子查询库
或者,考虑使用专门的子查询可以增强代码可读性并简化复杂查询的库。给出的示例将转换为以下内容:
$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中文网其他相关文章!