2016-09-16 15 views
0

我有表叫用戶和例如它看起來像:MySQL的循環的每一行,並更新

Name ID 
    Tom 1 
    Al 55 
    Kate 22 

...

的問題是:ID是不按順序排列。

我想給他們新的ID從1到用戶的長度。我想聲明一些var = 1並在循環中進行更新,並給它們新的ID = var,然後做var = var + 1直到var < =用戶長度

我該怎麼做?

非常感謝!

+1

爲什麼你認爲這是一個'問題'?提示:這不是 – Strawberry

+0

當然它不是,但我需要改變它,因爲我需要它做不同的東西。我改變了幾年前構建的Web應用程序,DB和PHP代碼真的寫錯了。我沒有時間從頭開始重寫所有內容。 – Ridd

回答

2

這裏是你會怎麼做,在MySQL的。只要運行這個:如果在用戶表中的ID並非由FK其他表引用

set @newid=0; 
update users set ID = (@newid:[email protected]+1) order by ID; 
+0

爲版本 「一個查詢」 的:'更新用戶設置ID =(@newid:= @ NEWID + 1),其中0 =(選擇@newid:= 0)以便通過ID;' – Mike

1

,下面的查詢可以在表中更新的ID有新的連續值:

CREATE TABLE IF NOT EXISTS tmpUsers (
    ID int not null, 
    newID int not null auto_increment primary key 
) engine = mysisam; 

INSERT INTO tmpUsers (ID,newID) 
SELECT ID,NULL 
FROM users 
ORDER BY ID; 

UPDATE users u INNER JOIN tmpUsers t 
ON u.ID=t.ID 
SET u.ID=t.NewID; 

DROP TABLE IF EXISTS tmpUsers; 

測試腳本:

CREATE TABLE users (ID int not null, name nvarchar(128) not null); 
INSERT users(ID,name) 
VALUES (1,'aaa'),(4,'bbb'),(7,'ggg'),(17,'ddd'); 
SELECT * FROM users;