que tiene intereted, por lo que se le ocurrió la siguiente solución. Considere la siguiente tabla:
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);
Por lo tanto, digamos que usted tiene John ir en contra de Adán por el lugar # 1 y John gana:
UPDATE placements
SET place = place +1
WHERE user != "John";
UPDATE placements
SET place = 1
WHERE user = "John";
John está ahora en primer lugar, y todos los demás estaban Bajó una posición. Ahora digamos que George se enfrenta a Carl por la posición de Carl (actualmente la ubicación n. ° 4). George gana: eso significa que George ahora es el lugar # 4, y Carl lugar # 5. ¿Qué le sucede a Georges en la posición anterior de # 8?
UPDATE placements
SET place = place +1
WHERE place > 3
AND place < 9
AND user != "George";
UPDATE placements
SET place = 4
WHERE user = "George";
Por lo tanto, realmente no es tan difícil de hacer. Solo debe conocer la ubicación actual de algunos de sus usuarios y ajustar sus consultas MySQL según sea necesario.
Si pega estas consultas en su terminal o phpMyAdmin (o lo que sea que use) y sigue, verá que funciona.
Su consulta se ve bien y debería funcionar como se pretende de forma aislada. –
Sunds más extraño. ¿Es esa tu consulta ** exacta ** o tienes una cláusula 'WHERE'? ¿Cómo lo estás ejecutando? Seguramente se debe ejecutar varias veces? ¿Tiene algún disparador sobre la mesa que pueda interferir con las cosas? Además, su consulta definitivamente no es 'UPDATE favorits SET order = @ order + 1' o algo así? –
aumentar al revés? simplemente tratando de entender ... – Orbit