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
相关产品推荐
相关产品推荐

