Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/07/2012, 14:52
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: SHOW COLUMNS pero con where

Hola de nuevo Jordi45:

Lo que pretendes hacer, es imposible con las consultas SHOW COLUMNS, y cualquier otra que sea sobre el diccionario de datos de tu BD, porque estas consultas NO CONSIDERAN EL CONTENIDO, sino justamente los metadatos de las tablas y objetos.

Si entendí correctamente lo que quieres hacer, tendrías que construir un SELECT más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+--------+--------+
  3. | campo1 | campo2 | campo3 |
  4. +--------+--------+--------+
  5. | uno    | one    | un     |
  6. | dos    | dos    | dos    |
  7. | tres   | three  | trois  |
  8. +--------+--------+--------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT campo FROM
  12.     -> (
  13.     ->   SELECT
  14.     ->     CASE WHEN campo1 = 'uno' THEN 'campo1' ELSE
  15.     ->       CASE WHEN campo2 = 'uno' THEN 'campo2' ELSE
  16.     ->         CASE WHEN campo3 = 'uno' THEN 'campo3' END
  17.     ->       END
  18.     ->     END campo
  19.     ->   FROM tabla
  20.     -> ) T WHERE campo IS NOT NULL;
  21. +--------+
  22. | campo  |
  23. +--------+
  24. | campo1 |
  25. +--------+
  26. 1 row in set (0.00 sec)
  27.  
  28. mysql> SELECT campo FROM
  29.     -> (
  30.     ->   SELECT
  31.     ->     CASE WHEN campo1 = 'trois' THEN 'campo1' ELSE
  32.     ->       CASE WHEN campo2 = 'trois' THEN 'campo2' ELSE
  33.     ->         CASE WHEN campo3 = 'trois' THEN 'campo3' END
  34.     ->       END
  35.     ->     END campo
  36.     ->   FROM tabla
  37.     -> ) T WHERE campo IS NOT NULL;
  38. +--------+
  39. | campo  |
  40. +--------+
  41. | campo3 |
  42. +--------+
  43. 1 row in set (0.00 sec)

Obviamente, este query no lo está creado de manera dinámica, quiere decir que si tu tabla cambia de estructura, pues entonces deberías cambiar también tu consulta... Los CASE-WHEN deberías hacerlos de manera exhaustiva, es decir, abarcando TODOS LOS CAMPOS QUE CONTENGA TU TABLA. observa también, que son CASE ANIDADOS, eso quiere decir que si por ejemplo, varias columnas tuvieran el mismo valor (como por ejemplo si buscaras el contenido "dos"), el resultado será LA PRIMER COLUMNA que lo contenga:

Código MySQL:
Ver original
  1. mysql> SELECT campo FROM
  2.     -> (
  3.     ->   SELECT
  4.     ->     CASE WHEN campo1 = 'dos' THEN 'campo1' ELSE
  5.     ->       CASE WHEN campo2 = 'dos' THEN 'campo2' ELSE
  6.     ->         CASE WHEN campo3 = 'dos' THEN 'campo3' END
  7.     ->       END
  8.     ->     END campo
  9.     ->   FROM tabla
  10.     -> ) T WHERE campo IS NOT NULL;
  11. +--------+
  12. | campo  |
  13. +--------+
  14. | campo1 |
  15. +--------+
  16. 1 row in set (0.00 sec)

Dale un vistazo para ver si esto en más o menos lo que necesitas.

saludos
Leo.