如何检索course表中program_vss为null或2的指定行数据?
实现course表的多条件查询需求
你的原代码只处理了program_vss为NULL的情况,没法覆盖“program_vss为NULL或等于2”的OR逻辑——因为get_where的数组参数默认用AND连接所有条件,无法直接表达OR分支。可以用以下两种方式解决:
方法一:使用查询构造器的分组条件(推荐,安全防注入)
利用CodeIgniter查询构造器的group_start()和group_end()包裹OR条件,确保逻辑优先级正确:
$this->db->where('is_top_course', 1); $this->db->where('status', 'active'); // 分组包裹OR条件,确保只作用于program_vss的两个判断 $this->db->group_start(); $this->db->where('program_vss IS NULL'); $this->db->or_where('program_vss', 2); $this->db->group_end(); return $this->db->get('course');
这段代码生成的SQL为:
SELECT * FROM `course` WHERE `is_top_course` = 1 AND `status` = 'active' AND (`program_vss` IS NULL OR `program_vss` = 2)
方法二:自定义WHERE条件字符串
如果需要更灵活的写法,可直接拼接WHERE语句,同时用参数绑定避免SQL注入:
$this->db->where('is_top_course', 1); $this->db->where('status', 'active'); $this->db->where('(program_vss IS NULL OR program_vss = ?)', 2); return $this->db->get('course');
两种方法都能实现需求,优先推荐方法一,它更符合CodeIgniter查询构造器规范,也更易维护。
内容的提问来源于stack exchange,提问作者katbori
相关产品推荐
相关产品推荐

