2017-03-03 53 views
0

我有一大堆例如2個用戶名爲「悟空」和3個用戶名「sliceoflife」重複的用戶名結束的毗連增量INT等在重複的用戶名

我知道這是相當簡單的事在PHP中,但有沒有辦法在MySQL中直接連接一個增量整數。

結果應該給我一個例子再次

悟空 goku1 sliceoflife sliceoflife1 sliceoflife2 等等......如果我基礎上,DateDateLastActive的增量

甚至會更好。

+0

請一些示例數據 –

+1

如果'username'用於在其日誌也許應該有一個'UNIQUE'指數反正共享CREATE TABLE語句。 – CD001

+0

@ CD001這是我正在嘗試更正的遷移數據。 – TopCheese

回答

0

應該能夠像這樣運行它(其中id代表您自動編號)

UPDATE table SET 
username = CONCAT(username, id) 
+0

我很欣賞答案,雖然這不是我要求的結果。 – TopCheese

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 
+0

我會試試這個謝謝你。 – TopCheese