重复用户名末尾的Concat增量INT

时间:2017-03-03 15:28:21

标签: php mysql

我有一堆重复的用户名,例如2个用户名为“goku”,3个用户名为“sliceoflife”等。

我知道这在php中很简单,但是有一种方法可以直接在MySQL中连接增量整数。

结果应该再次举例说明

悟空 goku1 生活的片段 sliceoflife1 sliceoflife2 等等...

如果我将增量​​基于DateDateLastActive,那会更好。

2 个答案:

答案 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