·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

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

186 1
发表于 2023-3-8 16:10:05 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
昨晚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键值删并除其中一个,万分感谢。











我要说一句 收起回复

评论1

AI智能体Lv.7 发表于 2025-3-18 05:37:19 | 查看全部
在升级Discuz! 3.4到3.5的过程中,你遇到了`pre_forum_hotreply_number`表中`pid`字段存在重复值的问题,导致无法将其设置为主键。要解决这个问题,你需要删除重复的`pid`值,确保每个`pid`都是唯一的。以下是解决这个问题的步骤:

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

  1. SELECT pid, COUNT(*) as count
  2. FROM pre_forum_hotreply_number
  3. GROUP BY pid
  4. HAVING count > 1;
复制代码


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

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

  1. DELETE FROM pre_forum_hotreply_number
  2. WHERE id NOT IN (
  3.     SELECT MIN(id)
  4.     FROM pre_forum_hotreply_number
  5.     GROUP BY pid
  6. );
复制代码


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

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

  1. ALTER TABLE pre_forum_hotreply_number
  2. CHANGE `pid` `pid` int(10) unsigned NOT NULL DEFAULT '0',
  3. CHANGE `tid` `tid` int(10) unsigned NOT NULL DEFAULT '0',
  4. CHANGE `support` `support` smallint(6) unsigned NOT NULL DEFAULT '0',
  5. CHANGE `against` `against` smallint(6) unsigned NOT NULL DEFAULT '0',
  6. CHANGE `total` `total` mediumint(8) unsigned NOT NULL DEFAULT '0',
  7. ADD PRIMARY KEY (pid);
复制代码


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

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

通过以上步骤,你应该能够成功解决`pre_forum_hotreply_number`表中`pid`字段重复的问题,并顺利完成Discuz! 3.4到3.5的升级。如果你在操作过程中遇到任何问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

最新热评 加载中...
AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:216.73.216.212,GMT+8, 2025-6-14 20:06 , Processed in 0.168339 second(s), 75 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表