我使用mysql和php与phpmyadmin。我在基于分区的计数器上遇到了一个主要问题,我想要改进,但是我的sql知识阻止了我这样做。我对此非常苦恼。
我希望我的表中的重复数据有一个计数器,如果这个值得到一个重复值,它会在值后面添加一个数字,然后从1重新开始,直到遇到一个新值,依此类推。以下是最终结果应该如何显示:
--------------------------- 1 | Josh-1 --------------------------- 2 | Josh-2 -------------------------- 3 | Josh-3 -------------------------- 4 | Josh-4 -------------------------- 5 | Fred-1 -------------------------- 6 | Fred-2 -------------------------- 7 | Fred-3 -------------------------
我以前在这里得到过关于这个计数器的帮助,但它并不按照我希望的方式工作。而且,当我按下表单中的插入按钮后,重新加载phpmyadmin后,表格看起来像这样:
--------------------------- 1 | Josh-1-1-1 --------------------------- 2 | Josh-2 -------------------------- 3 | Josh-3 -------------------------- 4 | Josh-4 -------------------------- 5 | Fred-1 -------------------------- 6 | Fred-2 -------------------------- 7 | Fred -------------------------
这里发生了什么?我寻求帮助重写的代码是这样的:
UPDATE usermeta u1, (SELECT u1.`id`, CONCAT(u1.`name`,'-',ROW_NUMBER() OVER(PARTITION BY u1.`name` ORDER BY u1.`id`)) newname FROM usermeta u1 JOIN (SELECT `name` , COUNT(*) FROM usermeta GROUP BY `name` HAVING COUNT(*) > 1) u2 ON u1.`name` = u2.`name` ) u3 SET u1.`name` = u3.`newname` WHERE u1.`id` = u3.`id`
这段代码能被重写成创建一个看起来像第一个表格示例并且在phpmyadmin中正常工作的带有编号名称和重复项的表格吗?非常感谢所有的帮助。请记住,我是一个困扰的中级sql用户。
可能的解决方案 - BEFORE INSERT 触发器和具有辅助自动增量的附加 MyISAM 表:
工作台
附加表
###扳机###Insert rows - AI 索引添加到名称中。检查结果。
现在看看附加表中存储了什么。
db<>小提琴##这里如果您的工作表
user已经存在,并且它包含一些数据,那么您将创建额外的表并使用数据填充它,例如,
雷雷
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=38f028cfe1c9e85188ab0454463dcd78