틈을 포함하지하기 위해 카운터를 업데이트 삭제 이제MySQL은, 이후 나는이 같은 MySQL의 테이블이
Id*| Text | Pos (integer)
-----------
A | foo | 0
B | bar | 1
C | baz | 2
D | qux | 3
, 내가 행을 삭제 한 후, 나는 나머지 행의 순위 값을 업데이트 할을 (간체) "구멍"이나 틈새가 발견되지 않도록하십시오.
내가 아이디 = 'C'로 행 삭제되면 예를 들어,이 지속 할 테이블은 다음과 같아야합니다
Id*| Text | Pos (integer)
-----------
A | foo | 0
B | bar | 1
D | qux | 2
이는 단일 쿼리에 수 있습니까? 허용 대답을 기반으로
UPDATE 이 내 문제에 대한 해결책이었다
START TRANSACTION;
SELECT @A:=pos FROM table_name WHERE Id= 'C';
DELETE FROM table_name WHERE Id = 'C';
UPDATE table_name SET Pos = Pos - 1 WHERE Pos > @A;
COMMIT;
감사합니다. ID가 주문되지 않았기 때문에 제 경우에는 작동하지 않습니다 (임의의 문자열) – Muleskinner
당신을 환영합니다! UPDATE 쿼리에'ORDER BY id ASC'를 추가하기 만하면됩니다. 업데이트 된 답변을 시도하십시오. – Omesh
하지만 여전히 "id> 'C'"를 사용하고 ID가 정렬되지 않아 작동하지 않습니다. – Muleskinner