如何在CodeIgniter中重写指定条件的MySQL UPDATE语句?
在CodeIgniter中重写指定MySQL更新语句
原MySQL语句的作用是:当table1表中mId列的某个值仅出现一次时,将对应行的shared字段设为0,原SQL代码如下:
UPDATE table1 JOIN ( SELECT mId, COUNT(*) c FROM table1 GROUP BY mId HAVING c < 2 ) t1 USING (mId) SET shared=0 ;
在CodeIgniter中可以通过两种方式实现:
方式一:直接执行原生SQL
这是最直接的方式,直接将原SQL语句传入框架的数据库查询方法执行:
// 在控制器或模型中执行 $sql = "UPDATE table1 JOIN ( SELECT mId, COUNT(*) c FROM table1 GROUP BY mId HAVING c < 2 ) t1 USING (mId) SET shared=0"; $this->db->query($sql); // 可选:获取受影响的行数 $affected_rows = $this->db->affected_rows();
方式二:使用Query Builder构建语句
CodeIgniter 3 版本
如果偏好使用框架的Query Builder构建语句,可以按以下步骤操作:
// 构建子查询 $subquery = $this->db->select('mId, COUNT(*) as c') ->from('table1') ->group_by('mId') ->having('c < 2') ->get_compiled_select(); // 执行更新操作 $this->db->set('shared', 0) ->join("($subquery) t1", 'table1.mId = t1.mId', 'inner') ->update('table1'); // 可选:获取受影响的行数 $affected_rows = $this->db->affected_rows();
CodeIgniter 4 版本
CodeIgniter 4的Query Builder提供了更简洁的子查询处理方式:
$db = \Config\Database::connect(); // 构建子查询 $subquery = $db->table('table1') ->select('mId, COUNT(*) as c') ->groupBy('mId') ->having('c < 2'); // 执行更新 $db->table('table1') ->set('shared', 0) ->joinSub($subquery, 't1', 'table1.mId = t1.mId') ->update(); // 获取受影响行数 $affected_rows = $db->affectedRows();
内容的提问来源于stack exchange,提问作者user17861074
相关产品推荐
相关产品推荐

