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

PHP电影数据库:更新重复演员表时重置计数器的方法求助

解决方法

首先要确保你的查询语句是按person_name排序的,这样相同姓名的记录会连续返回,不然没法正确重置计数器。修改查询语句为:

SELECT id, person_name FROM tbl_dup_actor ORDER BY person_name, id;

接下来调整PHP循环逻辑,新增变量记录上一个处理的姓名,每次遇到新姓名时重置计数器:

// 初始化变量:记录上一个姓名、计数器初始为1(因为第一个重复项要从2开始)
$previousName = '';
$counter = 1;

while ($query = $select_stmt->fetch(PDO::FETCH_ASSOC)) {
    $id = $query["id"];
    $currentName = $query["person_name"];

    // 对比当前姓名和上一个是否相同
    if ($currentName !== $previousName) {
        // 新姓名,重置计数器为2
        $counter = 2;
        // 更新上一个姓名为当前姓名
        $previousName = $currentName;
    } else {
        // 相同姓名,计数器自增
        $counter++;
    }

    $person = $currentName . '-' . $counter;

    $update_stmt->bindValue(":person_name", $person, PDO::PARAM_STR);
    $update_stmt->bindValue(":number", $id, PDO::PARAM_INT);
    
    // 每次绑定后执行更新,而不是循环结束后才执行
    $update_stmt->execute();
}

另外注意:你原来的代码把$update_stmt->execute()放在了循环外面,这会导致只有最后一次绑定的参数生效,所有记录都会被更新成最后一个值,必须把execute放到循环内部,每次绑定参数后执行一次更新。

内容的提问来源于stack exchange,提问作者ingmar leifsson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:06:23