내가 intereted 가지고, 그래서 나는 다음과 같은 솔루션을 함께했다. 다음 표 고려 : 그래서
CREATE TABLE `placements` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`user` varchar(12) NOT NULL,
`place` tinyint(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `placements` (`id`, `user`, `place`) VALUES
(1, 'Adam', 1),
(2, 'Bill', 2),
(3, 'Carl', 3),
(4, 'Doug', 4),
(5, 'Eddy', 5),
(6, 'Frank', 6),
(7, 'George', 7),
(8, 'Harry', 8),
(9, 'Ian', 9),
(10, 'John', 10);
을, 당신이 요한이 1 위를 아담에 가서이 말할 수와 요한 승리 :
UPDATE placements
SET place = place +1
WHERE user != "John";
UPDATE placements
SET place = 1
WHERE user = "John";
요한은 처음부터 지금과 다른 사람이었다 위치를 뒤엎었다. 이제 George가 Carl의 직위를 위해 Carl을 상대로 올라간다 고 말할 수 있습니다 (현재 배치 # 4). George가 승리합니다. George가 이제 4 위, Carl 5 위를 의미합니다. 조르쥬 이전 위치 # 8로 어떻게됩니까?
UPDATE placements
SET place = place +1
WHERE place > 3
AND place < 9
AND user != "George";
UPDATE placements
SET place = 4
WHERE user = "George";
그래서, 그렇게하기가 어렵지 않습니다. 일부 사용자의 현재 위치를 알고 필요에 따라 MySQL 쿼리를 조정하면됩니다.
이 쿼리를 터미널이나 phpMyAdmin (또는 무엇을 사용하든)에 붙여넣고 따라하면 따라 할 수 있습니다.
귀하의 질의어는 좋아 보이며 독립적으로 의도 된대로 동작해야합니다. –
일요일 가장 기괴한. 그것은 ** 정확한 ** 쿼리입니까, 아니면 그것에'WHERE' 절이 있습니까? 어떻게 그걸하고 있니? 반드시 여러 번 실행해야합니까? 테이블에 물건을 방해 할 수있는 트리거가 있습니까? 또한 귀하의 쿼리는 확실히 'UPDATE favorits SET order = @ order + 1' 또는 뭐가 아닌가요? –
뒤로 점진? 그냥 이해하려고 애를 썼어요 ... – Orbit