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

IFNULL ('campo','alias' )

Estas en el tema de IFNULL ('campo','alias' ) en el foro de Mysql en Foros del Web. Saludos cordiales, Mi pregunta es: ¿existe en mysql algo parecido a una condicional como con IFNULL(campo, alias) para que dependiendo del valor de un campo ...
  #1 (permalink)  
Antiguo 03/02/2011, 12:04
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
IFNULL ('campo','alias' )

Saludos cordiales,

Mi pregunta es: ¿existe en mysql algo parecido a una condicional como con IFNULL(campo, alias) para que dependiendo del valor de un campo mi query arroje en vez del valor el alias,

Ejemplo

create table persona (id, nombre, edad)

la idea es que al hacer el query mediante cierta condicion en el campo edad (si es menor que 18 o mayor) en vez de la edad me pueda colocar una cadena dependiendo de la condicion.

No se si me explique bien
  #2 (permalink)  
Antiguo 03/02/2011, 12:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: IFNULL ('campo','alias' )

Hola Marrselo:

Creo que te refieres a algo como esto:

Código MySQL:
Ver original
  1. mysql> drop table if exists personas;
  2. Query OK, 0 rows affected (0.01 sec)
  3.  
  4. mysql> #creamos una tabla de pruebas
  5. mysql> create table personas (id int, nombre varchar(10), edad int);
  6. Query OK, 0 rows affected (0.05 sec)
  7.  
  8. mysql>  #insertamos valores a la tabla
  9. mysql> insert into personas values (1, 'Hugo', 17), (2, 'Paco', 18), (1, 'Luis',
  10.  19);
  11. Query OK, 3 rows affected (0.01 sec)
  12. Records: 3  Duplicates: 0  Warnings: 0
  13.  
  14. mysql> #Verificamos el contenido de la tabla
  15. mysql> select * from personas;
  16. +------+--------+------+
  17. | id   | nombre | edad |
  18. +------+--------+------+
  19. |    1 | Hugo   |   17 |
  20. |    2 | Paco   |   18 |
  21. |    1 | Luis   |   19 |
  22. +------+--------+------+
  23. 3 rows in set (0.00 sec)
  24.  
  25. mysql> #Cambiamos el campo edad por su descripción con IF
  26. mysql> select id, nombre, if(edad < 18, 'menor de edad', 'mayor de edad') as eda
  27. d
  28.     -> from personas;
  29. +------+--------+---------------+
  30. | id   | nombre | edad          |
  31. +------+--------+---------------+
  32. |    1 | Hugo   | menor de edad |
  33. |    2 | Paco   | mayor de edad |
  34. |    1 | Luis   | mayor de edad |
  35. +------+--------+---------------+
  36. 3 rows in set (0.00 sec)
  37.  
  38. mysql> #Cambiamos el campo edad por su descripción con CASE
  39. mysql> select id, nombre, case when (edad < 17) then 'menor de edad' else 'mayor
  40. de edad' end as edad from personas;
  41. +------+--------+---------------+
  42. | id   | nombre | edad          |
  43. +------+--------+---------------+
  44. |    1 | Hugo   | mayor de edad |
  45. |    2 | Paco   | mayor de edad |
  46. |    1 | Luis   | mayor de edad |
  47. +------+--------+---------------+
  48. 3 rows in set (0.00 sec)
  49.  
  50. mysql>


Saludos
Leo.
  #3 (permalink)  
Antiguo 03/02/2011, 14:14
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: IFNULL ('campo','alias' )

Leo mil Gracias por tu respuesta,
te comento que el primer ejemplo va a resolver muchas de mis limitaciones funciona bien, pero el segundo ejemplo aunque no funciona , significa que podria yo usar hasta 3 condiciones??

osea por ejemplo si fuera 3 las condiciones

<18 menor de edad
= 18 ciudadano
>18 mayor de edad

esto tambien se puede hacer dirctamente en mysql, si es asi, estaria viendo la luz ajaja gracias de antemano
  #4 (permalink)  
Antiguo 03/02/2011, 14:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: IFNULL ('campo','alias' )

hola marrselo, si hubieras revisado un poco el código de hubieras dado cuenta que el error con el segundo ejemplo fue que la condición que puse es edad < 17. Bastaba con cambiarla por un edad < 18 o lo que es lo mismo edad <= 17 y el ejemplo funcionaría igual para ambos casos.

Puedes anidar las sentencias opcionales que quieras tanto en el IF como en el CASE-WHEN. Te recomiendo que le des un buen vistazo a la ayuda en línea que proporciona mySQL para que cheques la sintaxis respectiva

Para checar la sintaxis

No es recomendable que abuses de la anidación, pues puede afectar considerablemente el rendimiento de tu consulta. con IF quedaría más o menos así

Código SQL:
Ver original
  1. SELECT id, nombre, IF(edad < 18, 'menor de edad', IF( edad = 18, 'ciudadano', 'mayor de edad')) AS edad
  2. FROM personas;

Creo que podrías sacar cual es la sintaxis para hacerlo con el case no???

Saludos
Leo.
  #5 (permalink)  
Antiguo 03/02/2011, 16:36
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: IFNULL ('campo','alias' )

Claro que si , salio perfecto, gracias

PD entonces tu recomiendas en funcion al rendimiento usar el codigo de programacion cuando son demasiadas condicionales , osea a partir de cuantas condiciones es preferible usar codigo de programacion en vez de base de datos,
  #6 (permalink)  
Antiguo 04/02/2011, 09:35
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: IFNULL ('campo','alias' )

Cita:
Iniciado por Marrselo Ver Mensaje
Claro que si , salio perfecto, gracias

PD entonces tu recomiendas en funcion al rendimiento usar el codigo de programacion cuando son demasiadas condicionales , osea a partir de cuantas condiciones es preferible usar codigo de programacion en vez de base de datos,
Mira, según algunos autores no es recomendable anidar más de 5 niveles en sentencias IF-ELSE o CASE-WHEN tanto en programación como en base de datos.
En todo caso puedes utilizar un SWITCH O CASE en programación o un CASE-WHEN, pero no en su forma de búsqueda, me explico. En Base de Datos la sentencia CASE-WHEN se comporta de dos maneras

Case de búsqueda:

CASE WHEN numero = 1 THEN 'uno' ELSE
CASE WHEN numero = 2 THEN 'dos' ELSE
CASE WHEN numero = 3 THEN 'tres'
END
END
END

Case Sencillo:

CASE numero
WHEN 1 THEN 'uno'
WHEN 2 THEN 'dos'
WHEN 3 THEN 'tres'
END

En ambos casos el resultado sería semejante, pero si observas en el primer ejemplo estás anidando tres CASE-WHEN, mientras que en el caso del CASE Sencillo es un solo CASE.

Por lo tanto, depende de tu lógica de negocio, pero si tienes un buen diseño no tendrás necesidad de usar tanta anidación

Saludos
Leo.
  #7 (permalink)  
Antiguo 15/02/2011, 17:15
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: IFNULL ('campo','alias' )

Cita:
Iniciado por leonardo_josue Ver Mensaje
Mira, según algunos autores no es recomendable anidar más de 5 niveles en sentencias IF-ELSE o CASE-WHEN tanto en programación como en base de datos.
En todo caso puedes utilizar un SWITCH O CASE en programación o un CASE-WHEN, pero no en su forma de búsqueda, me explico. En Base de Datos la sentencia CASE-WHEN se comporta de dos maneras

Case de búsqueda:

CASE WHEN numero = 1 THEN 'uno' ELSE
CASE WHEN numero = 2 THEN 'dos' ELSE
CASE WHEN numero = 3 THEN 'tres'
END
END
END

Case Sencillo:

CASE numero
WHEN 1 THEN 'uno'
WHEN 2 THEN 'dos'
WHEN 3 THEN 'tres'
END

En ambos casos el resultado sería semejante, pero si observas en el primer ejemplo estás anidando tres CASE-WHEN, mientras que en el caso del CASE Sencillo es un solo CASE.

Por lo tanto, depende de tu lógica de negocio, pero si tienes un buen diseño no tendrás necesidad de usar tanta anidación

Saludos
Leo.
Muy amable con la respuesta, muy explicativo tambien gracias, caso cerrado

Etiquetas: ifnull
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 16:55.