mysql - update - Actualizar/Incrementar una sola columna en varias filas a la vez
update para actualizar varios campos (3)
Lo que le está diciendo al DB que haga actualizar CADA registro en la tabla incrementando su campo de orden en uno. Así que CADA registro siempre tendrá el mismo valor. Creo que está intentando establecer el último registro en 1 y el registro más antiguo en (sin registros + 1).
Así que tal vez puedas probar esto:
set @count = (SELECT COUNT(ID) from favorits);
UPDATE favourits SET order = @count-ID+1
Ahora esto es asumiendo que no se borran registros. En ese caso, tendría que ajustar esto y establecer el último registro en 1 y luego incrementar el valor del pedido para cada registro anterior ordenado por ID.
Así que este sería el enfoque:
set @i=0;
set @Count=(SELECT COUNT(*) from favorits);
UPDATE favorits SET `order` = @Count-(@i:=@i+1)+1;
Estoy intentando agregar filas a una columna, manteniendo el order
de la columna más reciente establecida en una, y todas las demás filas contando desde allí.
En este caso, agrego una nueva fila con el orden = 0, luego uso esta consulta para actualizar todas las filas por una.
"UPDATE favorits SET order = order+1"
Sin embargo, lo que sucede es que todas las filas se actualizan al mismo valor. Obtengo una pila de favoritos, todos con orden 6 por ejemplo, cuando debería ser uno con 1, el siguiente con 2 y así sucesivamente.
¿Cómo actualizo estas filas de manera que las ordenen como deberían ser?
Gracias,
~ Jordan
Me interetre, así que se me 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);
Entonces, digamos que tienes a John que se enfrenta a Adam por el puesto # 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 fueron derribados en una posición. Ahora digamos que George se enfrenta a Carl por la posición de Carl (actualmente, posición # 4). George gana: Eso significa que George es ahora el lugar # 4, y Carl el lugar # 5. ¿Qué pasa con la antigua posición de Georges # 8?
UPDATE placements
SET place = place +1
WHERE place > 3
AND place < 9
AND user != "George";
UPDATE placements
SET place = 4
WHERE user = "George";
Entonces, realmente no es tan difícil de hacer. Solo debe conocer la ubicación actual de algunos de sus usuarios y ajustar sus consultas de MySQL según sea necesario.
Si pegas estas consultas en tu terminal o phpMyAdmin (o lo que uses) y sigues adelante, verás que funciona.
SET @a = 0;
UPDATE favorits SET order = @a:=@a+1;