Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/07/2017, 10:19
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta segun condición

Hola stevens82:

Lo que pretendes puede realizarse, pero no necesariamente es algo sencillo...

De entrada te comento que no puedes como tal hacer un SELECT condicional, lo que puedes hacer es mostrar información de manera condicional... trataré de explicarme mejor con un ejemplo...

Supongamos que tenemos una tabla así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------+--------+--------+
  3. | id   | campo1 | campo2 | campo3 |
  4. +------+--------+--------+--------+
  5. |    1 | uno    | one    | un     |
  6. |    2 | dos    | two    | duex   |
  7. |    3 | tres   | three  | trois  |
  8. +------+--------+--------+--------+
  9. 3 rows in set (0.02 sec)

imagina entonces que para el ID = 1 quieres mostrar la descripción del campo1, para el ID = 2 la descripción del campo2 y lo mismo para el ID = 3 la descripción del campo3, entonces puedes aplicar una condición tipo CASE-WHEN así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->    CASE id
  3.     ->      WHEN 1 THEN campo1
  4.     ->      WHEN 2 THEN campo2
  5.     ->      WHEN 3 THEN campo3
  6.     ->    END campo
  7.     -> FROM
  8.     -> tabla;
  9. +-------+
  10. | campo |
  11. +-------+
  12. | uno   |
  13. | two   |
  14. | trois |
  15. +-------+
  16. 3 rows in set (0.00 sec)

Igual y esto te puede servir más o menos para lo que quieres hacer... sin embargo, hay algunos puntos a considerar...

1. No puedes hacer condiciones que te digan que selecciones menos campos o más campos... es decir, no puedes hacer una condición que para cierto valor te seleccione 4 campos y para otra condición te seleccione 8... En todo caso, lo que podrías hacer es poner los campos que "sobran" o que falten en NULL

2. Cada condición regresa sólo un campo, es lo mismo que comento en el punto 1, no podrías hacer una condición para que te regrese un campo y en otra dos campos... lo que tendrías que hacer es aplicar la misma condición para cada campo que quieras pintar o no...

En lo particular NO TE RECOMIENDO QUE HAGAS ESO... sino que más bien trates de implementar un Procedimiento Almacenado SP en donde pongas toda la lógica que quieras... así podrías entonces aplicar algo como esto:

Código:
SI condición = 1 ENTONCES
    SELECT campo1, campo 2 FROM tabla

SI condición = 2 ENTONCES
    SELECT campo4, campo5, campo6, campo7, campo8 
    FROM tabla1
    INNER JOIN tabla2 ON ...
    WHERE
    ...
Es decir, armar la consulta que necesites para cada condición... aquí no tendrías problemas en cuanto a si necesitas hacer mas JOIN's o mostrar más o menos campos.

Haz la prueba y nos comentas.

Saludos
Leo.