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

condicional if en consulta select sql?

Estas en el tema de condicional if en consulta select sql? en el foro de Mysql en Foros del Web. Hola gente,quiero saber si puedo hacer con sql una consulta donde pueda decir que si ella me da 0 registros entonces hacer otra,nose si me ...
  #1 (permalink)  
Antiguo 06/12/2016, 07:44
 
Fecha de Ingreso: octubre-2012
Ubicación: Rio Cuarto,Cordoba,Argentina
Mensajes: 139
Antigüedad: 11 años, 6 meses
Puntos: 0
condicional if en consulta select sql?

Hola gente,quiero saber si puedo hacer con sql una consulta donde pueda decir que si ella me da 0 registros entonces hacer otra,nose si me explico... yo selecciono id donde el estado sea 1, pero si no hay ninguno necesito por defecto obtener los id donde el estado sea 0(cero).
Código PHP:
function obtener_fecha_cierre ($id){
    
$result mysql_query("SELECT fecha_detalle FROM detalle_tickets_db WHERE        ((estado_detalle=1)and(id_tickets=$id)) Limit 1");


    
$datosmysql_fetch_array($result);
    return 
$datos['fecha_detalle'];


lo que necesito lo hice en php con dos consultas select , queria saber si se podia optimizar haciendolo desde sql,habia visto de la utilizacion de if pense que podria hacerse,desde ya saludos
__________________
Juan Pablo A. S.
  #2 (permalink)  
Antiguo 06/12/2016, 15:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: condicional if en consulta select sql?

Hola juaarias:

Hay algunas formas para hacer lo que pides, pero creo que más que "optimizar" las cosas, en realidad las complicarías más.

Te comento que las sentencias condicionales tipo IF o CASE en realidad no están pensadas originalmente para SQL, sino que vienen precisamente de los lenguajes de programación, de tal suelte que por lo general tienen mejor rendimiento que hacer consultas complejas.

Ahora bien, a modo de cultura general y de que tengas posibilidad de probar una alternativa, te comento que podrías utilizar UNION's para hacer más o menos lo que quieres. Veamos este ejemplo:

Supongamos que tienes esta tabla:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+----------------+-------------+
  3. | id   | estado_detalle | descripcion |
  4. +------+----------------+-------------+
  5. |    1 |              1 | uno         |
  6. |    1 |              1 | one         |
  7. |    2 |              1 | dos         |
  8. |    2 |              0 | two         |
  9. |    3 |              0 | tres        |
  10. +------+----------------+-------------+
  11. 5 rows in set (0.00 sec)

Si quisiéramos obtener los registros con estado_detalle = 1 entonces harías algo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla
  2.     -> WHERE
  3.     ->   estado_detalle = 1;
  4. +------+----------------+-------------+
  5. | id   | estado_detalle | descripcion |
  6. +------+----------------+-------------+
  7. |    1 |              1 | uno         |
  8. |    1 |              1 | one         |
  9. |    2 |              1 | dos         |
  10. +------+----------------+-------------+
  11. 3 rows in set (0.00 sec)

Observa que el id=3 no aparece porque no tienen ningún estado_detalle = 1. Si quisieras en estos casos mostrar por default los registros con estado = 0, podrías hacerlo con UNION's y subconsultas, así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla
  2.     -> WHERE
  3.     ->   estado_detalle = 1
  4.     -> UNION
  5.     -> SELECT * FROM tabla
  6.     -> WHERE
  7.     ->   NOT EXISTS ( SELECT * FROM tabla T1
  8.     ->                WHERE
  9.     ->                  tabla.id = T1.id
  10.     ->                  AND t1.estado_detalle = 1)
  11.     ->   AND estado_detalle = 0;
  12.  
  13. +------+----------------+-------------+
  14. | id   | estado_detalle | descripcion |
  15. +------+----------------+-------------+
  16. |    1 |              1 | uno         |
  17. |    1 |              1 | one         |
  18. |    2 |              1 | dos         |
  19. |    3 |              0 | tres        |
  20. +------+----------------+-------------+
  21. 4 rows in set (0.00 sec)

Observa que en la segunda subconsulta, lo primero que haces es verificar con el NOT EXISTS que no haya ningún registro con estado = 1 para el id respectivo.

Difícilmente esto será más eficiente que utilizar un simple IF de programación, pero bueno, haz la prueba y nos comentas.

Saludos
Leo.

Etiquetas: condicional, fecha, php, registro, 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 20:42.