Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Es posible hacer este IF?

Estas en el tema de Es posible hacer este IF? en el foro de Mysql en Foros del Web. Buenas , vengo de desarrollar en entorno de micorsoft y soy nuevo en php+mysql , necesito un sp que inserte un nuevo usuario, previa comprobación ...
  #1 (permalink)  
Antiguo 29/02/2012, 11:56
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Es posible hacer este IF?

Buenas , vengo de desarrollar en entorno de micorsoft y soy nuevo en php+mysql , necesito un sp que inserte un nuevo usuario, previa comprobación de si existe o no el login a ingresar, mi problema es la sintaxis del if, y no la encuentro, solo encuentro if pero en select o where y no es lo que ando buscando.Necesitaria que me devolviera 1 o 0 segun .... seria algo tal que:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE PROCEDURE `echeverria_joyero_db`.`Ins_Usuario` (OUT res INT,In Login varchar(45),In Password varchar(45),In Nivel int,In Nombre varchar(45), In Apellidos varchar(100))
BEGIN
/*Compruebo que no exista el login*/
declare existe int;

select existe=Count(idUsuario) from Usuarios where Login=Login;
if existe>0
begin
res=1;
end
else
begin
insert into Usuarios (Login,Password,Nivel,Nombre,Apellidos) values (Login,Password,Nivel,Nombre,Apellidos);
res=0;/*No existia*/
end

END

Cual seria la sintaxis correcta?
Gracias.
  #2 (permalink)  
Antiguo 29/02/2012, 16:25
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Es posible hacer este IF?

Hola ferminako:

La sintaxis del IF que estás buscando es diferente a la que se utiliza en el Select.

http://dev.mysql.com/doc/refman/5.0/...onstructs.html

Hay varios detalles en lo que estás intentando hacer, creo que es conveniente que le des una revisada a la documentación de MySQL, pues la sintaxis no es tan semejante a la de SQL Server por ejemplo. Vayamos por partes:

1. No es recomendable que tus parámetros se llamen igual que tus campos.
2. Evita en lo posible el uso de palabras en inglés (PASSWORD)
3. En MySQL, para colocar el resultado de un SELECT en una variable utilizas INTO:

http://dev.mysql.com/doc/refman/5.0/...statement.html

Para el ejemplo voy a suponer que tienes una tabla más o menos así;

Código MySQL:
Ver original
  1. mysql> CREATE TABLE usuarios
  2.     -> login VARCHAR(45),
  3.     -> contrasenia VARCHAR(45),
  4.     -> nivel INT,
  5.     -> nombre VARCHAR(45),
  6.     -> apellidos VARCHAR(100),
  7.     -> PRIMARY KEY (id));
  8. Query OK, 0 rows affected (0.10 sec)
  9.  
  10. mysql> INSERT INTO usuarios VALUES (NULL, 'uno', 'uno', 1, 'Uno', 'Unico');
  11. Query OK, 1 row affected (0.03 sec)
  12.  
  13. mysql> SELECT * FROM usuarios;
  14. +----+-------+-------------+-------+--------+-----------+
  15. | id | login | contrasenia | nivel | nombre | apellidos |
  16. +----+-------+-------------+-------+--------+-----------+
  17. |  1 | uno   | uno         |     1 | Uno    | Unico     |
  18. +----+-------+-------------+-------+--------+-----------+
  19. 1 row in set (0.00 sec)

Ahora bien, el SP que intentas hacer quedaría más o menos así:

Código:
DELIMITER $$
DROP PROCEDURE IF EXISTS `Ins_Usuario`$$
CREATE PROCEDURE Ins_Usuario(OUT Res INT, 
IN in_login VARCHAR(45), 
IN in_contrasenia VARCHAR(45),
IN in_nivel INT, 
IN in_nombre VARCHAR(45), 
IN in_apellido VARCHAR(100)
)
BEGIN
DECLARE existe INT;
SET existe = 0;
SELECT COUNT(id) INTO existe FROM usuarios WHERE login = in_login;
IF (existe > 0) THEN
	SET res = 1;
ELSE
	INSERT INTO usuarios VALUES (NULL, in_login, in_contrasenia, in_nivel, in_nombre, in_apellido);
	SET res = 0;
END IF;
END$$
DELIMITER ;
para probarlo hacemos lo siguiente:

Código MySQL:
Ver original
  1. mysql> #insertamos un nuevo
  2. mysql> CALL Ins_Usuario(@res, 'dos', 'dos', 2, 'Dos', 'Segundo');
  3. Query OK, 1 row affected (0.06 sec)
  4.  
  5. mysql> #verificamos el resultado del procedimiento
  6. mysql> SELECT @res;
  7. +------+
  8. | @res |
  9. +------+
  10. |    0 |
  11. +------+
  12. 1 row in set (0.00 sec)
  13.  
  14. mysql> #verificamos el resultado en la tabla
  15. mysql> SELECT * FROM usuarios;
  16. +----+-------+-------------+-------+--------+-----------+
  17. | id | login | contrasenia | nivel | Nombre | apellidos |
  18. +----+-------+-------------+-------+--------+-----------+
  19. |  1 | uno   | uno         |     1 | Uno    | Unico     |
  20. |  2 | dos   | dos         |     2 | Dos    | Segundo   |
  21. +----+-------+-------------+-------+--------+-----------+
  22. 2 rows in set (0.00 sec)
  23.  
  24. mysql> #tratamos de insertar nuevamente el mismo registro
  25. mysql> CALL Ins_Usuario(@res, 'dos', 'dos', 2, 'Dos', 'Segundo');
  26. Query OK, 1 row affected (0.00 sec)
  27.  
  28. mysql> #verificamos el resultado del procedimiento
  29. mysql> SELECT @res;
  30. +------+
  31. | @res |
  32. +------+
  33. |    1 |
  34. +------+
  35. 1 row in set (0.00 sec)
  36.  
  37. mysql> #verificamos el resultado en la tabla
  38. mysql> SELECT * FROM usuarios;
  39. +----+-------+-------------+-------+--------+-----------+
  40. | id | login | contrasenia | nivel | Nombre | apellidos |
  41. +----+-------+-------------+-------+--------+-----------+
  42. |  1 | uno   | uno         |     1 | Uno    | Unico     |
  43. |  2 | dos   | dos         |     2 | Dos    | Segundo   |
  44. +----+-------+-------------+-------+--------+-----------+
  45. 2 rows in set (0.00 sec)

Saludos
Leo.
  #3 (permalink)  
Antiguo 01/03/2012, 05:53
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: Es posible hacer este IF?

Gracias por la respuesta, se nota que no conozco el entorno php+mysql , y que vengo de Micro$oft... asi que seguro nos vemos por aqui ;) Un saludo.

Etiquetas: php, posible, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:36.