我使用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用户。
1条答案
按热度按时间e7arh2l61#
可能得解决方案- BEFORE INSERT触发器与附加得MyISAM表(带有辅助自动增量):
一种工作台
附加表
触发器
插入行-将AI索引添加到名称中。检查结果。
第一个
看看现在附加表中存储了什么。
一个
如果您工作表
user
已经存在,并且它包含一些数据,那么您需要创建一个附加表,并使用以下命令填充数据,例如:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=38f028cfe1c9e85188ab0454463dcd78