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

Como realizar consultas condicionadas

Estas en el tema de Como realizar consultas condicionadas en el foro de Mysql en Foros del Web. Hola. Tengo una duda, no se si esto se puede hacer directamente en mysql o tendria q usar otro lenguaje intermediario como php. Lo que ...
  #1 (permalink)  
Antiguo 23/02/2012, 14:17
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 14 años, 7 meses
Puntos: 10
Como realizar consultas condicionadas

Hola.

Tengo una duda, no se si esto se puede hacer directamente en mysql o tendria q usar otro lenguaje intermediario como php.

Lo que quiero hacer es una consulta parecida a esta:

IF (columna1 > 1){ SELECT clumna1, columna2 FROM table }
ELSE IF (columna1 = 2){ SELECT clumna3, columna4 FROM table }
ELSE IF (columna1 > 2){ SELECT clumna5, columna6 FROM table }

es posible hacer esto directamente en Mysql? o tendria que primero hacer la consulta para sacar el valor de columna1 y luego hacer otra consulta mas?
__________________
Mantente al tanto del acontecer Turistico nacional
Visita el Parque Bicentenario El Salvador
  #2 (permalink)  
Antiguo 23/02/2012, 14:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Como realizar consultas condicionadas

Hola severicks:

En primer lugar, las condiciones que estás especificando no son correctas pues tienes dos condiciones que no son excluyentes:

IF (columna1 > 1)...
...
IF (columna1 > 2)

Si el valor de la columna 1 es 2 o mayor a 2 entonces SIEMPRE ENTRARÍA POR EL PRIMER IF, PERO NUNCA POR EL ÚLTIMO IF, ojo con eso.

No estoy seguro de si entendí correctamente qué es lo que quieres hacer, por ejemplo tengo la duda de si las condiciones de deben evaluar para cada uno de los registros o sólo considerando el primero... sería conveniente que nos pusieras algunos datos de ejemplo para saber qué es lo que pretendes. Por lo pronto se me ocurre que lo que quieres hacer es algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+----------+----------+----------+----------+----------+
  3. | columna1 | columna2 | columna3 | columna4 | columna5 | columna6 |
  4. +----------+----------+----------+----------+----------+----------+
  5. |        1 | uno 1    |        2 | dos 1    |        3 | tres 1   |
  6. |        2 | uno 2    |        2 | dos 2    |        3 | tres 2   |
  7. |        3 | uno 3    |        2 | dos 3    |        3 | tres 3   |
  8. +----------+----------+----------+----------+----------+----------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT columna1,
  12.     -> CASE WHEN (columna1 < 2) THEN columna1
  13.     -> ELSE
  14.     -> CASE WHEN (columna1 = 2) THEN columna3
  15.     -> ELSE
  16.     -> CASE WHEN (columna1 > 2) THEN columna5 END
  17.     -> END
  18.     -> END primer_columna,
  19.     -> CASE WHEN (columna1 < 2) THEN columna2
  20.     -> ELSE
  21.     -> CASE WHEN (columna1 = 2) THEN columna4
  22.     -> ELSE
  23.     -> CASE WHEN (columna1 > 2) THEN columna6 END
  24.     -> END
  25.     -> END segunda_columna
  26.     -> FROM tabla;
  27. +----------+----------------+-----------------+
  28. | columna1 | primer_columna | segunda_columna |
  29. +----------+----------------+-----------------+
  30. |        1 |              1 | uno 1           |
  31. |        2 |              2 | dos 2           |
  32. |        3 |              3 | tres 3          |
  33. +----------+----------------+-----------------+
  34. 3 rows in set (0.02 sec)

Observa que los valores de las columnas (primer_columna y segunda_columna) dependen del valor de la columna1, en cada renglón se evalúa la columna 1 para determinar qué valores colocar. Si esto no es lo que necesitas entonces te repito, pon algunos datos de ejemplo para aclararnos las cosas.

Finalmente, recuerda que existen los PROCEDIMIENTOS ALMACENADOS, con estos puedes hacer prácticamente lo que desees, proporciona elementos como un lenguaje de programación.

Saludos
Leo.
  #3 (permalink)  
Antiguo 23/02/2012, 15:48
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: Como realizar consultas condicionadas

Gracias por tu respuesta Leo.
Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+----------+----------+----------+----------+----------+
  3. | columna1 | columna2 | columna3 | columna4 | columna5 | columna6 |
  4. +----------+----------+----------+----------+----------+----------+
  5. |        1 | uno 1    |        2 | dos 1    |        3 | tres 1   |
  6. |        2 | uno 2    |        2 | dos 2    |        3 | tres 2   |
  7. |        3 | uno 3    |        2 | dos 3    |        3 | tres 3   |
  8. +----------+----------+----------+----------+----------+----------+
  9. 3 rows in set (0.00 sec)

Lo que necesito hacer es que por ejemplo:
Cuando "columna1"=1 generar una consulta "SELECT columna2, columna3, columna4 FROM tabla"
Cuando "columna1"=2 generar una consulta "SELECT columna3, columna4, columna5 FROM tabla"
Cuando "columna1"=3 generar una consulta "SELECT columna4, columna5, columna6 FROM tabla"
__________________
Mantente al tanto del acontecer Turistico nacional
Visita el Parque Bicentenario El Salvador
  #4 (permalink)  
Antiguo 23/02/2012, 16:11
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Como realizar consultas condicionadas

Me dejaste igual o quizás con un poco más de dudas

Cita:
Lo que necesito hacer es que por ejemplo:
Cuando "columna1"=1 generar una consulta "SELECT columna2, columna3, columna4 FROM tabla"
Cuando "columna1"=2 generar una consulta "SELECT columna3, columna4, columna5 FROM tabla"
Cuando "columna1"=3 generar una consulta "SELECT columna4, columna5, columna6 FROM tabla"
sigo sin entender qué es lo que quieres hacer... con la tabla que puse de ejemplo (porque sigues sin poner tus propios datos) la columna 1 toma los tres valores, pues cada registro tiene un valor diferente, entonces ¿qué resultado es el que esperas? ¿tres consultas? o como pregunté al inicio, ¿sólo evalúas el primer valor de la columna 1 y arrojas como resultado una sola consulta?

Por otro lado, ¿probaste la opción de los procedimientos almacenados? ¿no se ajusta a lo que quieres?

nuevamente te repito, es conveniente que nos pongas datos de ejemplo y a partir de esos datos nos digas cuál es la salida que esperas...

Saludos
Leo.
  #5 (permalink)  
Antiguo 23/02/2012, 17:54
 
Fecha de Ingreso: septiembre-2009
Mensajes: 306
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: Como realizar consultas condicionadas

Cita:
Iniciado por leonardo_josue Ver Mensaje
¿qué resultado es el que esperas? ¿tres consultas? o como pregunté al inicio, ¿sólo evalúas el primer valor de la columna 1 y arrojas como resultado una sola consulta?
Lo que intento lograr es evaluar el valor de la primera columna y dependiendo de ese valor hacer una sola consulta.

por ejemplo, asi es como lo haria en php

Código Php:
Ver original
  1. $query="SELECT columna1 FORM tabla";
  2. $resultado = mysql_fetch_assoc(mysql_query($query));
  3. switch($resultado['columna1']{
  4.       case 1:
  5.       $query2="SELECT columna2, columna3 FORM tabla";
  6.       break;
  7.       case 2:
  8.       $query2="SELECT columna3, columna4 FORM tabla";
  9.       break;
  10.             case 3:
  11.       $query2="SELECT columna4, columna5 FORM tabla";
  12.       break;
  13. }
  14. $resultado2 = mysql_query($query2);

La verdad no conocia nada sobre procedimientos almacenados, intente leer un poco sobre eso y quede igual, no entendi casi nada
__________________
Mantente al tanto del acontecer Turistico nacional
Visita el Parque Bicentenario El Salvador
  #6 (permalink)  
Antiguo 27/02/2012, 17:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Como realizar consultas condicionadas

Perdona, ya veo que lo tenías solucionado con PHP.
No sé si sería más rentable hacer una sola consulta:
SELECT columna1, columna2, columna3, columna4, columna5, columna6 FROM tutabla
y luego en el ciclo, según el valor de columna 1, mostrar las otras.
__________________


__________________

Última edición por jurena; 27/02/2012 a las 17:08

Etiquetas: php, 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 22:37.