我正在用php开发电影数据库。我有一个大型的表单,用户可以在一个名为tbl_cast_person和tbl_crew_person的表中添加强制转换和剧组名称。当表中的惟一关键字满足并发现重复名称时,我会将重复的值存储在一个名为tbl_dup_actor的表中。然后,我尝试用一个计数器更新这个tbl_dup_a表,这样输出应该如下所示
乔治·亨利-2
乔治·亨利-3
乔治亨利-4
马修福克斯-2
马修福克斯-3
马修福克斯-4
我只能让它工作起来,所以它看起来就像这行下面的输出
乔治·亨利-2
乔治·亨利-3
乔治亨利-4
马修·福克斯-5
马修福克斯-6
马修·福克斯-7
我用于更新表tbl_dup_actor的循环现在如下所示
while ($query = $select_stmt->fetch(PDO::FETCH_ASSOC)) {
$counter++;
$id = $query["id"];
$name=$query["person_name"];
$person = $name . '-' . $counter;
$update_stmt->bindValue(":person_name",
$person,PDO::PARAM_STR);
$update_stmt->bindValue(":number",$id,PDO::PARAM_INT);
}
$update_stmt->execute();
}我的更新sql如下所示
UPDATE tbl_dup_actor SET person_name = :person_name WHERE id = :number我的问题是,每次在进行更新的select循环中满足新值时,如何使计数器重置为2?我希望我在某种程度上已经很好地描述了我的问题。非常感谢收看我的帖子。我知道我对一两件事有点不清楚,但我已经尽了最大努力来澄清这一点。
发布于 2022-08-06 19:17:48
首先,我改变了数据库设计。我把你们的桌子标准化如下:
CREATE TABLE persons (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, firstname varchar(255) NOT NULL, lastname varchar(255) NOT NULL);
CREATE TABLE cast (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, person INT NOT NULL, CONSTRAINT `fk_cast_person_id` FOREIGN KEY (person) REFERENCES persons (id) ON DELETE CASCADE ON UPDATE CASCADE);
CREATE TABLE crew (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, person INT NOT NULL, CONSTRAINT `fk_crew_person_id` FOREIGN KEY (person) REFERENCES persons (id) ON DELETE CASCADE ON UPDATE CASCADE);INSERT INTO persons (firstname, lastname) VALUES ('Anton', 'Arabella'), ('Anton', 'Arabella'), ('Anton', 'Arabella'), ('Bruno', 'Banane'), ('Caroline', 'Champagner'), ('Bruno', 'Banane'), ('Bruno', 'Banane'), ('Bruno', 'Banane');
INSERT INTO cast (person) VALUES (1), (2), (3), (7), (8);
INSERT INTO crew (person) VALUES (4), (5), (6);另外,我的SQL查询处理重复条目的计数器。
-- Replace the JOIN operand as needed
SELECT ROW_NUMBER() OVER (PARTITION BY p.firstname, p.lastname ORDER BY p.firstname ASC, p.lastname ASC) id, p.firstname, p.lastname
FROM persons p
JOIN (SELECT firstname, lastname -- get the duplicate names
FROM persons
JOIN cast ON persons.id = cast.person
GROUP BY firstname, lastname
HAVING COUNT(firstname) > 1) duplicates ON p.firstname = duplicates.firstname AND p.lastname = duplicates.lastname
JOIN cast ON p.id = cast.person;正如你所看到的,我的方法完全不同。输出还包括id = 1所指示的第一对(姓氏,姓氏)。
样本输出:
+----+-----------+----------+
| id | firstname | lastname |
+----+-----------+----------+
| 1 | Anton | Arabella |
| 2 | Anton | Arabella |
| 3 | Anton | Arabella |
| 1 | Bruno | Banane |
| 2 | Bruno | Banane |
+----+-----------+----------+干杯
https://stackoverflow.com/questions/73260202
复制相似问题