Comunidad de diseño web y desarrollo en internet online

Como traer un valor de otra tabla dentro de una consulta

Citar            
MensajeEscrito el 30 May 2012 06:04 pm
Hola a todos!

Antes que nada gracias por la ayuda.

Tengo que hacer una consulta SQL con las siguientes caracteristicas

TABLA 1 (incluye todos los registros deseados)
TABLA 2 (incluye datos adicionales de los registros de la tabla 1)
TABLA 3 (incluye datos adicionales de los registros de la tabla 2)

RESULTADO DESEADO
Una tabla con todos los registros de la tabla 1 que incluya las columnas de la tabla 2, ademas de los valores que no se almacenan directamente en la tabla 2, sino que estan almacenados en la tabla 3.

Actualmente tengo este codigo y funciona bien para la consulta de las tablas 1 y 2. El problema es cuando quiero traer los datos de la tabla 3 e incluirlos en el resultado.

Código MySQL :

SELECT nid as ID, 
  field_nuevo_value as Nuevo, 
  field_cambio_value as Cambio, 
  field_p_e_value as PE, 
  field_promocion_value as Prom, 
  field_tinta_extra_value as TE, 
  field_size_value as Tamano 
FROM topcrm_node as N 
LEFT JOIN topcrm_field_data_field_size as T ON N.nid = T.entity_id 
LEFT JOIN topcrm_field_data_field_cambio as C ON N.nid = C.entity_id 
LEFT JOIN topcrm_field_data_field_nuevo as Nu ON N.nid = Nu.entity_id 
LEFT JOIN topcrm_field_data_field_p_e as Pos ON N.nid = Pos.entity_id 
LEFT JOIN topcrm_field_data_field_promocion as Pr ON N.nid = Pr.entity_id 
LEFT JOIN topcrm_field_data_field_tinta_extra as Tin ON N.nid = Tin.entity_id 
WHERE N.type='anuncios' order by ID;


Espero que alguien pueda ayudarme!! :D

Por epineda

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 31 May 2012 11:38 pm
Saludos
Te cuento que en una ocasión tuve que relacionar 3 tablas, te dejo un ejemplo
tabla1 con los siguientes campos: id, nombrelibro, preciolibro
tabla2 con los siguientes campos: id, autorlibro, editoriallibro
tabla3 con los siguientes campos: id, unidadeslibro, generolibro

claro que los campos “id” de las tres tablas tienen una relación en común que tienen un código y con un select lo puedes lograr

Código MySQL :

SELECT tabla1.nombrelibro, tabla1.preciolibro, tabla2.autorlibro, tabla2.editoriallibro, tabla3.unidadeslibro, tabla3.generolibro FROM tabla1, tabla2, tabla3 WHERE tabla1.id = tabla2.id AND tabla2.id = tabla3.id


Espero que con esto se resuelva tu problema

Atte.
Mario

Por mario22121985

88 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Jun 2012 12:34 am
Gracias Mario!

Si me funciono, lo unico que le hice diferente es que utilice LEFT JOIN para que me traiga todos los valores de la tabla 1 y aquellos de las tablas 2 y 3 que estuvieran disponibles, pues no todos los registros tienen valor en todas las columnas. Asi fue como quedo mi consulta finalmente:

Código MySQL :

SELECT
  nid as ID,
  field_nombre_anuncio_value as Nombre,
  field_nuevo_value as Nuevo, 
  field_cambio_value as Cambio, 
  field_p_e_value as PE, 
  field_promocion_value as Prom, 
  field_tinta_extra_value as TE,
  field_size_value as Tamano,
  field_edicion_value as Edicion
FROM topcrm_node as N
  LEFT JOIN topcrm_field_data_field_nombre_anuncio as No ON N.nid = No.entity_id
  LEFT JOIN topcrm_field_data_field_size as T ON N.nid = T.entity_id 
  LEFT JOIN topcrm_field_data_field_cambio as C ON N.nid = C.entity_id 
  LEFT JOIN topcrm_field_data_field_nuevo as Nu ON N.nid = Nu.entity_id 
  LEFT JOIN topcrm_field_data_field_p_e as Pos ON N.nid = Pos.entity_id 
  LEFT JOIN topcrm_field_data_field_promocion as Pr ON N.nid = Pr.entity_id 
  LEFT JOIN topcrm_field_data_field_tinta_extra as Tin ON N.nid = Tin.entity_id 
  LEFT JOIN topcrm_field_data_field_edicion_anuncio AS Edicion ON N.nid = Edicion.entity_id
  LEFT JOIN topcrm_field_data_field_edicion AS Folio ON Edicion.field_edicion_anuncio_target_id = Folio.entity_id
WHERE N.type='anuncios' order by ID;


Todos los LEFT JOIN hacen referencia a la primera tabla 'N' y el ultimo hace referencia a la tabla 'Edicion' para obtener el valor de la tabla Folio.

Esta la estoy utilizando en DRUPAL para hacer un reporte.

Muchas gracias!!

Por epineda

1 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.