tengo una tabla varios que se compone de un campo id , otro fk y otro int llamado orden, cuando se elimina un registro necesito que todos los que tengan un orden mayor, se les reste 1 para reordenarlos y que no queden saltos en la secuencia de orden.
Ej:
1-1-1
2-2-2
3-3-3
Borro el id=1 por lo tanto:
- El 2-2-2 pasa a ser 2-2-1 y el 3-3-3 pasa a ser el 3-3-2.
Para ello tengo una variable var_orden que tiene el orden del registro a borrar en nuestro caso valdria1.
Mi pregunta es puedo hacer este update o Orden=Orden-1 no es valido , y deberia primero obtener el orden de cada registro para luego por mediod e una variable decrementarlo? Y en cualquier caso, porque me devuelve ese error si var_orden es una variable?
Código:
update varios set Orden=Orden-1 where Orden>var_oden;
Unknown column 'var_oden' in 'where clause'
Codigo completo sp:
Código:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `VariosBorrar`(out res int,
in in_nombre varchar(45))
BEGIN
DECLARE existe INT;
declare var_orden int;
SET existe = 0;
SELECT idVarios INTO existe FROM varios WHERE Articulos_idArticulos=(select idArticulos from articulos where Nombre=in_nombre);
IF (existe > 0) THEN
/* Reordeno los que tienen un mayor orden, para ellos selecciono el orden del reg a borrar, la guardo en var_orden,
y le doy un orden=0 , para poder reordenar las demas puesto que el Orden es Unique*/
select Orden into var_orden from varios where idVarios=existe;
update varios set Orden=0 where Idvarios=existe;
update varios set Orden=Orden-1 where Orden>var_oden;
delete from varios where idVarios=existe;
SET res = 0;
ELSE
SET res = 1;
END IF;
END