Hace poco tiempo tuve la necesidad de actualizar varios registros a la vez, lo mas sencillo es crear una consulta y repetirla n veces de acuerdo a la cantidad de registros que deseo actualizar, he aquí la solución sencilla:
UPDATE Directorio SET Orden = 1 WHERE DirectorioId = 1021;
// Ejecutarla
UPDATE Directorio SET Orden = 0 WHERE DirectorioId = 1022;
// Ejecutarla
UPDATE Directorio SET Orden = 2 WHERE DirectorioId = 1023;
// Ejecutarla
// Ejecutarla
UPDATE Directorio SET Orden = 0 WHERE DirectorioId = 1022;
// Ejecutarla
UPDATE Directorio SET Orden = 2 WHERE DirectorioId = 1023;
// Ejecutarla
Esto funcionaria sin problemas, sin embargo al tener mas registros esto consumiría demasiados recursos de nuestro servidor porque se ejecutarían n sentencias, la opción es simplificar todo a una sola consulta usando CASE, WHEN y THEN. A continuación como quedaría nuestra consulta:
UPDATE Directorio
SET Orden = CASE DirectorioId
WHEN 1021 THEN 1
WHEN 1022 THEN 0
WHEN 1023 THEN 2
END
WHERE DirectorioId IN (1021, 1022, 1023)
SET Orden = CASE DirectorioId
WHEN 1021 THEN 1
WHEN 1022 THEN 0
WHEN 1023 THEN 2
END
WHERE DirectorioId IN (1021, 1022, 1023)
De esta forma nuestro servidor ejecutara una sola consulta. En este caso que vimos solo actualizamos un campo pero también es posible actualizar varios campos a la vez, he aquí el ejemplo:
UPDATE Directorio
SET Orden = CASE DirectorioId
WHEN 1021 THEN 1
WHEN 1022 THEN 0
WHEN 1023 THEN 3
END,
SET DepartamentoId = CASE DirectorioId
WHEN 10 THEN 11
WHEN 12 THEN 21
WHEN 13 THEN 11
END
WHERE DirectorioId IN (1021, 1022, 1023)
SET Orden = CASE DirectorioId
WHEN 1021 THEN 1
WHEN 1022 THEN 0
WHEN 1023 THEN 3
END,
SET DepartamentoId = CASE DirectorioId
WHEN 10 THEN 11
WHEN 12 THEN 21
WHEN 13 THEN 11
END
WHERE DirectorioId IN (1021, 1022, 1023)
Ahora solo un poco de ingenio para incluirlo en nuestro código PHP ya sea con sentencias de control FOR, DO o While. Espero haya sido de utilidad este post.
1 comentario:
A mi me ha venido genial para un procedimiento. Gracias
Publicar un comentario