2016-09-16 2 views
0

나는 테이블라는 사용자가 예를 들어 그것과 같은 업데이트 :MySQL의 모든 행에 대한 루프

Name ID 
    Tom 1 
    Al 55 
    Kate 22 

...

문제는 다음 ID를 순서에 있지 않습니다.

사용자의 길이에 1에서 새로운 ID를 부여하고 싶습니다. 좀 VAR = 1을 선언하고 루프에서 UPDATE를하고 그들에게 새로운 ID = VAR을주고, 나중에 VAR < = 사용자 길이 때까지이 어떻게 할 수있는

1 + VAR = VAR하십니까?

대단히 감사합니다!

+1

왜 이것이 '문제'라고 생각하십니까? 힌트 : IT가 아님 – Strawberry

+0

물론 뭔가가 달라지기 때문에 그것을 바꾸어야합니다. 나는 몇 년 전에 구축 된 웹 애플 리케이션을 변경, DB와 PHP 코드는 정말 잘못 썼습니다. 나는 처음부터 모든 것을 다시 쓸 시간이 없다. – Ridd

답변

2

다음은 MySQL에서 수행하는 방법입니다. 그냥이 실행

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; 

:

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

"하나의 쿼리"버전으로 : ID = (@newid : = @ newid + 1) 여기서 ID는 0 = (select @newid : = 0) order by ID = – Mike

1

을 사용자 테이블의 ID가 FK하여 다른 테이블에 의해 참조되지 않으면, 다음 쿼리는 새로운 연속적인 값을 가질 테이블에 ID를 업데이트 할 수 있습니다 테스트 스크립트 :

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;