You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:05:02