Cargando



MySQL Procedimientos almacenados condicionales IF – CASE

Los procedimiento almacenados son comandos sql agrupados en secuencias, como un pequeño programa para facilitar una tarea en la base de datos.


ago 12 2013 10:10
Procedimientos almacenados con condicional IF

Crearemos base de datos y una tabla con comentarios que los usuarios hacen, podrían ser artículos, post o lo que quisiéramos.

CREATE TABLE `comentarios` (
`idcomentario` int(11) DEFAULT NULL,
`fecha` date DEFAULT NULL,
`idusuario` int(50) DEFAULT NULL,
`comentario` text,
PRIMARY KEY (`idincidencia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Vamos a crear un procedimiento almacenado que cuente la cantidad de comentarios que ha dejado un usuario y nos devuelva el nivel en que se encuentra ese usuario tomando como referencia para el ejemplo.

Experto si ha realizado mas de 5000 comentarios
Avanzado si ha comentado entre 4999 y 1000 veces
Moderador si ha comentado entre 999 y 500 veces
Redactor si ha comentado entre 499 y 100 veces

Creamos el procedimiento almacenado y tendrá dos parámetros uno sera de entrada el id o numero de usuario cuya variable es p_usuario y otra de salida que sera el nivel con la variable p_nivel.

mysql-procedimiento-if.jpg


Explicamos el procedimiento almacenado lo llamamos, suponemos un idusuario=112
CALL nivelusuario(112)
Selecciona y cuenta la cantidad de comentarios para este usuario y lo almacena en la variable total, luego la estructura if asignara el nivel a la variable p_nivel y nos devolverá el valor.

<? // Preparamos una consulta desde php
$resultado = $mysqli->query("CALL nivelusuario(112)");
$fila = $resultado->fetch_assoc();
echo 'Nivel: '.$fila['p_nivel']; ?>


Procedimientos almacenados con condicional CASE

El funcionamiento es muy similar al anterior solo que el condicional es CASE y en este ejemplo obtenemos el costo de envió o recargo según la localidad de un cliente.

mysql-procedimiento-if-2.jpg


Supondremos un idciudad=2 y llamamos al procedimiento almacenadp
CALL costoenvio(2)

<? // Preparamos una consulta desde php
$resultado = $mysqli->query("CALL costoenvio(2)");
$fila = $resultado->fetch_assoc();
echo 'Recargo por envio '.$fila['p_recargo']; ?>


También dentro de las posibilidades que brindan las estructuras condicionales, podemos utilizar las estructuras if o case para realizar varias acciones con un solo procedimiento almacenados
Crearemos por ejemplo un procedimiento almacenado para gestionar productos al cual enviandole un parametro podremos luego determinar que accion o tarea realizaremos.

mysql-procedimiento-if-3.jpg


Podemos observar que en el procedimiento productos tenemos un parámetro denominado p_accion, entonces asignamos si la acción sera guardar un nuevo producto o modificar en la base de datos

Ejemplo para insertar un nuevo producto

<? // Preparamos una consulta desde php
$resultado = $mysqli->query("CALL productos(10,'Teléfono móvil','100,00', 'nuevo')");
echo 'El producto ha sido dado de alta'; ?>


Ejemplo para insertar un editar o modificar un producto

<? // Preparamos una consulta desde php
$resultado = $mysqli->query("CALL productos(10,'Teléfono móvil MXC3','120,00', 'editar')");
echo 'El producto ha sido modificado '; ?>


Este método es muy útil para agrupar tareas conocidas como CRUD es decir crear, leer, editar y borrar datos y realizar actualizaciones y búsquedas todo ordenado en un mismo archivo facilitando de esta manera el mantenimiento y la posibilidad de escalar la base de datos de ser necesario.
Ademas permite desde el punto de vista del análisis funcional tener mas en claro las reglas de negocio de la aplicación.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X