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

SHOW COLUMNS pero con where

Estas en el tema de SHOW COLUMNS pero con where en el foro de Mysql en Foros del Web. No sé si alguien le ha pasado esto quiero obtener el nombre de las columnas (no de los campos) que tengan un determinado valor en ...
  #1 (permalink)  
Antiguo 19/07/2012, 13:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
SHOW COLUMNS pero con where

No sé si alguien le ha pasado esto quiero obtener el nombre de las columnas (no de los campos) que tengan un determinado valor en su campo.

O sea si coincide el nombre del campo con la variable, que saque el nombre de la columna.

Pero no sé como, de ejemplo

$query_colum = "SHOW COLUMNS FROM $tabla;

Saco el nombre de todas las columnas de la tabla pero si quiero sacar solo las columnas que tengan el valor de la variable mandada en su campo y me saque el nombre de la columna (no del campo)...
  #2 (permalink)  
Antiguo 19/07/2012, 13:15
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: SHOW COLUMNS pero con where

Hola Jordi45:

No me queda claro qué es lo que quieres en realidad

Cita:
...y me saque el nombre de la columna (no del campo)...
En conceptos de Base de Datos un CAMPO es lo mismo que una COLUMNA entonces no sé a qué refieres o qué información es la que quieres obtener... No sé si esto te sirva, pero tú puedes poner una sección WHERE en la sentencia SHOW:

Código MySQL:
Ver original
  1. mysql> SHOW COLUMNS FROM tabla;
  2. +-------+---------+------+-----+---------+-------+
  3. | Field | Type    | Null | Key | Default | Extra |
  4. +-------+---------+------+-----+---------+-------+
  5. | id    | int(11) | YES  |     | NULL    |       |
  6. | fecha | date    | YES  |     | NULL    |       |
  7. | hora  | time    | YES  |     | NULL    |       |
  8. | valor | int(11) | YES  |     | NULL    |       |
  9. +-------+---------+------+-----+---------+-------+
  10. 4 rows in set (0.01 sec)
  11.  
  12. mysql> SHOW COLUMNS FROM tabla WHERE field = 'fecha';
  13. +-------+------+------+-----+---------+-------+
  14. | Field | Type | Null | Key | Default | Extra |
  15. +-------+------+------+-----+---------+-------+
  16. | fecha | date | YES  |     | NULL    |       |
  17. +-------+------+------+-----+---------+-------+
  18. 1 row in set (0.01 sec)
  19.  
  20. mysql> SHOW COLUMNS FROM tabla WHERE type = 'int(11)';
  21. +-------+---------+------+-----+---------+-------+
  22. | Field | Type    | Null | Key | Default | Extra |
  23. +-------+---------+------+-----+---------+-------+
  24. | id    | int(11) | YES  |     | NULL    |       |
  25. | valor | int(11) | YES  |     | NULL    |       |
  26. +-------+---------+------+-----+---------+-------+
  27. 2 rows in set (0.01 sec)

Si esto no es lo que necesitas pon un ejemplo de lo que te regresa la sentencia SHOW COLUMNS y lo que quieres obtener en realidad.

Saludos
Leo.
  #3 (permalink)  
Antiguo 19/07/2012, 13:41
 
Fecha de Ingreso: octubre-2008
Mensajes: 168
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: SHOW COLUMNS pero con where

Código:
$query_campo = "SHOW COLUMNS FROM viajes WHERE FIELD = 'fecha';"
Si hago esto me saca el nombre del campo fecha, lo que quiero es por ejemplo sacar el nombre de la columna que por ejemplo la fecha sea el 25 de diciembre o sea consultar con un registro y sacarme el nombre de la columna.
  #4 (permalink)  
Antiguo 19/07/2012, 14:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 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.
  #5 (permalink)  
Antiguo 19/07/2012, 15:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: SHOW COLUMNS pero con where

Creo que para hacerlo dinámico sería mejor ayudarte con programación. Este no es el lugar, pero la primera consulta de leonardo te dará los nombres de los campos de la tabla en que desees buscar. Una vez obtenidos y con la ayuda de programación, yo lanzaría una búsqueda del dato en cada campo por separado. Eso me permitiría obtener tanto el nombre del campo o campos donde se encuentre, aunque fuera a costa de una consulta por campo y una consulta previa, es decir, si la tabla tiene 7 campos, con 8 consultas. Aunque siempre podría eliminar campos de la búsqueda si el carácter del dato buscado me permite hacerlo. Si el campo es DATE, dejo de buscar cadena de texto y números; o los decimales. No sé, eso es lo que yo haría... pero claro, esa parte en el foro de programación.

Etiquetas: columns, show, tabla, campos
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:25.