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

Consulta segun condición

Estas en el tema de Consulta segun condición en el foro de Mysql en Foros del Web. Hola compañeros, bueno aca con una duda de como puedo hacer diferentes consultas segun se seleccione un dato, no se co seria usanfo case o ...
  #1 (permalink)  
Antiguo 04/07/2017, 17:12
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Consulta segun condición

Hola compañeros, bueno aca con una duda de como puedo hacer diferentes consultas segun se seleccione un dato, no se co seria usanfo case o if?

teng esto:
Código MySQL:
Ver original
  1. SELECT P.id, PL.titulo, CP.nombre, CP.id as idper
  2. FROM pagina P
  3. INNER JOIN pagina_lang PL ON P.id = PL.id_pagina
  4. LEFT JOIN categorias_personas CP ON CP.id_tipo_donacion = P.tipo_donacion
  5. LEFT JOIN pagina_persona PP ON PP.idcatpersona = CP.id
  6. WHERE P.tipo_donacion = 1 AND PL.id_lang = 1
  7. GROUP BY CP.id;

el tema que si el tipo de donacion es 2 me debe traer unos resultados y si es uno es otro el cual tiene diferentes campo, esto lo hago para un combobox anidado es algo complicado la estructura de las tablas que no estan en una misma como deberia ser por eso mi consulta, ya que cuanod el tipo_donacion es 1 el idper es nulo y depdendieno de eso necesito que me haga un select diferente no se si me explique bien, espeor sus respuesta para iluminarme Gracias!!!...
  #2 (permalink)  
Antiguo 05/07/2017, 10:19
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.

Etiquetas: condición, select, tabla
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 02:46.