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

llamar a un campo por su posicion dentro de la estructura de la tabla

Estas en el tema de llamar a un campo por su posicion dentro de la estructura de la tabla en el foro de Mysql en Foros del Web. Buenas, tengo una bd con distintas tablas unas de informacion y otras de datos de dispositivos, y una vista que me muestra todos los dispositivos, ...
  #1 (permalink)  
Antiguo 06/09/2010, 00:38
 
Fecha de Ingreso: octubre-2005
Mensajes: 18
Antigüedad: 13 años, 11 meses
Puntos: 1
llamar a un campo por su posicion dentro de la estructura de la tabla

Buenas,

tengo una bd con distintas tablas unas de informacion y otras de datos de dispositivos, y una vista que me muestra todos los dispositivos,

info_a
--------
id nick
1 a
2 b

dato_a
---------
id_a valor fecha
1 1 2010-08-08
1 1 2010-08-07
1 1 2010-08-06
2 1 2010-08-08
2 1 2010-08-07
2 1 2010-08-06

v_disp
---
id_disp t_disp
1 a
2 a
1 b
2 b


desde php quiero montar una sentencia sql dinamica al que se le pasa las tablas de datos e informativa y me iguale por id, el problema es que todas las tablas de info el campo id es el campo id, pero en la de datos el campo id es id_'dispositivo', y siempre es la 1º columna de la tabla

¿hay alguna forma de llamar a un campo por su posicion dentro de la estructura de la tabla? es decir

select *
from dato_a, info_a
where dato_a.[0]=info_a.[0] ¿es to se puede hacer?

Saludos y gracias
  #2 (permalink)  
Antiguo 06/09/2010, 05:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 9 meses
Puntos: 2653
Respuesta: llamar a un campo por su posicion dentro de la estructura de la tabla

En MySQL, al menos, no puedes invocar un campo por su posición en la tabla, pero si puedes averiguar cuál es el campo y cuál su posición dentro de la tabla consultando la tabla `COLUMNS` de la base `INFORMATION_SCHEMA`.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/09/2010, 05:38
 
Fecha de Ingreso: octubre-2005
Mensajes: 18
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: llamar a un campo por su posicion dentro de la estructura de la tabla

ok, se que puedo obtener los campos de la bd con SHOW COLUMNS FROM tabla,
pero... puedo hacer

select *
from info_a, dato_a
where info_a.id=dato_a.(show columns from dato_a limit 1)???
  #4 (permalink)  
Antiguo 06/09/2010, 06:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 9 meses
Puntos: 2653
Respuesta: llamar a un campo por su posicion dentro de la estructura de la tabla

No. Yo no hablo de SHOW COLUMNS (aunque puede ser funcional ), sino de consultar directamente la tabla de columnas en la base de esquemas.
Lo que debes hacer es un proceso que te permita construir la sentencia sobre la base de la información que recuperas:
Código MySQL:
Ver original
  1. SELECT COLUMN_NAME, ORDINAL_POSITION, COLUMN_KEY
  2. FROM INFORMATION_SCHEMA.`COLUMNS`
  3. WHERE TABLE_NAME = 'nombreDeTabla' AND TABLE_SCHEMA = 'NombreDeBase'
  4. ORDER BY ORDINAL_POSITION;
Con esa información es suficiente para lograrlo, por cuanto la primera columna te devuelve el nombre de los campos, la segunda el orden en que aparecen en la tabla, y la tercera trae "PRI" en aquel campo que es PK.

Pero el proceso de creación de la sentencia en base a esta tabla dependerá de tí. MySQL no tiene recursos para hacer automáticamente eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: estructura, llamar, posicion, tablas, 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 03:38.