浅生 发表于 2023-3-8 16:10:05

3.4升级到3.5,请教一个数据库删除重复值的问题

昨晚3.4升级到3.5期间,遇到出错提示:

提示信息如下:

升级表 pre_forum_hotreply_number 出错,请手工执行以下升级语句后,再重新运行本升级程序:

升级SQL语句:
ALTER TABLE pre_forum_hotreply_number CHANGE `pid` `pid` int(10) unsigned NOT NULL DEFAULT '0', CHANGE `tid` `tid` int(10) unsigned NOT NULL DEFAULT '0', CHANGE `support` `support` smallint(6) unsigned NOT NULL DEFAULT '0', CHANGE `against` `against` smallint(6) unsigned NOT NULL DEFAULT '0', CHANGE `total` `total` mediumint(8) unsigned NOT NULL DEFAULT '0', ADD PRIMARY KEY (pid)


运行后提示:
MySQL 返回: 文档
#1062 - Duplicate entry '16953658' for key 'PRIMARY'




我仔细看了pre_forum_hotreply_number这个表,的确pid键有很多重复值,这样的话就无法将pid设置为主键。

菜鸟不懂mysql,所以在这里请教mysql的命令语句,可以快速的找出相同的pid键值删并除其中一个,万分感谢。











AI智能体 发表于 2025-3-18 05:37:19

在升级Discuz! 3.4到3.5的过程中,你遇到了`pre_forum_hotreply_number`表中`pid`字段存在重复值的问题,导致无法将其设置为主键。要解决这个问题,你需要删除重复的`pid`值,确保每个`pid`都是唯一的。以下是解决这个问题的步骤:

### 1. 查找重复的`pid`值
首先,你需要找出哪些`pid`值是重复的。可以使用以下SQL语句来查找重复的`pid`值:

SELECT pid, COUNT(*) as count
FROM pre_forum_hotreply_number
GROUP BY pid
HAVING count > 1;

这条SQL语句会返回所有重复的`pid`值以及它们出现的次数。

### 2. 删除重复的`pid`值
接下来,你需要删除重复的`pid`值。你可以使用以下SQL语句来删除重复的记录,只保留每个`pid`值的第一条记录:

DELETE FROM pre_forum_hotreply_number
WHERE id NOT IN (
    SELECT MIN(id)
    FROM pre_forum_hotreply_number
    GROUP BY pid
);

这条SQL语句会删除所有`pid`值重复的记录,只保留每个`pid`值的第一条记录(假设表中有一个自增的`id`字段)。

### 3. 添加主键
在删除重复的`pid`值后,你可以重新运行升级SQL语句,将`pid`设置为主键:

ALTER TABLE pre_forum_hotreply_number
CHANGE `pid` `pid` int(10) unsigned NOT NULL DEFAULT '0',
CHANGE `tid` `tid` int(10) unsigned NOT NULL DEFAULT '0',
CHANGE `support` `support` smallint(6) unsigned NOT NULL DEFAULT '0',
CHANGE `against` `against` smallint(6) unsigned NOT NULL DEFAULT '0',
CHANGE `total` `total` mediumint(8) unsigned NOT NULL DEFAULT '0',
ADD PRIMARY KEY (pid);

### 4. 验证
最后,你可以再次检查`pre_forum_hotreply_number`表,确保`pid`字段没有重复值,并且主键已经成功添加。

### 注意事项
- 在执行删除操作之前,建议先备份数据库,以防万一。
- 如果表中没有自增的`id`字段,你可能需要使用其他唯一标识符来删除重复的记录。

通过以上步骤,你应该能够成功解决`pre_forum_hotreply_number`表中`pid`字段重复的问题,并顺利完成Discuz! 3.4到3.5的升级。如果你在操作过程中遇到任何问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 3.4升级到3.5,请教一个数据库删除重复值的问题