我有一堆重复的用户名,例如2个用户名为“goku”,3个用户名为“sliceoflife”等。
我知道这在php中很简单,但是有一种方法可以直接在MySQL中连接增量整数。
结果应该再次举例说明
悟空 goku1 生活的片段 sliceoflife1 sliceoflife2 等等...
如果我将增量基于Date
列DateLastActive
,那会更好。
答案 0 :(得分:0)
应该能够像这样运行它(id
表示你的自动编号)
UPDATE table SET
username = CONCAT(username, id)
答案 1 :(得分:0)
创建表/插入数据。
CREATE TABLE USER (
NAME VARCHAR(255) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO USER (NAME) VALUES('goku');
INSERT INTO USER (NAME) VALUES('goku');
INSERT INTO USER (NAME) VALUES('sliceoflife');
INSERT INTO USER (NAME) VALUES('sliceoflife');
INSERT INTO USER (NAME) VALUES('sliceoflife');
<强>查询强>
SELECT * FROM USER
<强>结果强>
name
-------------
goku
goku
sliceoflife
sliceoflife
sliceoflife
这可以通过用户变量实现。
<强>查询强>
SELECT
*
, (
CASE
WHEN
@user = User.name
THEN
@rank := @rank + 1
WHEN
@user != User.name
THEN
@rank := ''
END
)
AS
rank
, @user := User.name
FROM
USER
CROSS JOIN (
SELECT
@user := ''
, @rank := ''
)
AS
init_user_vars
ORDER BY
User.name ASC
<强>结果强>
name @user := '' @rank := '' rank @user := User.name
----------- ----------- ----------- ------ --------------------
goku goku
goku 1 goku
sliceoflife sliceoflife
sliceoflife 1 sliceoflife
sliceoflife 2 sliceoflife
现在很容易获得CONCAT的名字和排名。 您需要将上述查询用作已传递的表。
SELECT
(
CASE
WHEN rank IS NOT NULL
THEN CONCAT(NAME, rank)
WHEN rank IS NULL
THEN CONCAT(NAME)
END
)
AS
NAME
FROM (
SELECT
*
, (
CASE
WHEN
@user = User.name
THEN
@rank := @rank + 1
WHEN
@user != User.name
THEN
@rank := ''
END
)
AS
rank
, @user := User.name
FROM
USER
CROSS JOIN (
SELECT
@user := ''
, @rank := ''
)
AS
init_user_vars
ORDER BY
User.name
)
AS
user_ranked
<强>结果强>
name
--------------
goku
goku1
sliceoflife
sliceoflife1
sliceoflife2