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

Combinar dos tablas (1:n)

Estas en el tema de Combinar dos tablas (1:n) en el foro de Bases de Datos General en Foros del Web. Hola gente, Quiero ver la forma ideal o óptima de resolver lo siguiente. Tengo dos tablas de una base de datos: > productos AS p ...
  #1 (permalink)  
Antiguo 28/06/2010, 12:22
 
Fecha de Ingreso: abril-2010
Ubicación: Santa Fe, Argentina
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Combinar dos tablas (1:n)

Hola gente,

Quiero ver la forma ideal o óptima de resolver lo siguiente. Tengo dos tablas de una base de datos:

> productos AS p
--> prd_id
--> prd_nm

fotos AS f
--> pic_id
--> pic_prd_id
--> pic_dsc
--> pic_file

Por cada producto puedo tener 0 o más fotos, y ambas tablas están vinculadas por p.prd_id y f.pic_prd_id

Tengo que presentar un listado de los productos y solo una sola foto (en el que caso de que haya una foto). Más allá de la posibilidad de modificar la base de datos:

¿existe alguna manera de hacerlo con un select, es decir que por fila de producto seleccione una fila de fotos? (estoy utilizando MySQL 5).

Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 30/06/2010, 06:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Combinar dos tablas (1:n)

Código MySQL:
Ver original
  1. SELECT MIN(f.pic_id)
  2. FROM fotos AS f
  3. GROUP BY f.pic_prd_id

El primer id de foto de cada producto (de los que tengan foto).


Código MySQL:
Ver original
  1. SELECT f1.pic_id,f1.pic_prd_id,f1.pic_dsc,f1.pic_file
  2. FROM fotos AS f1
  3. WHERE f1.pic_id in (SELECT MIN(f.pic_id)
  4.                                    FROM fotos AS f
  5.                                    GROUP BY f.pic_prd_id)

El resto de datos de las fotos elegidas


Código MySQL:
Ver original
  1. SELECT p.prd_id,p.prd_nm,f2.pic_id,f2.pic_prd_id,f2.pic_dsc,f2.pic_file
  2. FROM productos AS p
  3. LEFT JOIN (SELECT f1.pic_id,f1.pic_prd_id,f1.pic_dsc,f1.pic_file
  4.                      FROM fotos AS f1
  5.                      WHERE f1.pic_id in (SELECT MIN(f.pic_id)
  6.                                        FROM fotos AS f
  7.                                        GROUP BY f.pic_prd_id)) AS f2
  8. ON p.prd_id=f2.pic_prd_id

Ahora hacemos un LEFT JOIN con los productos para que aparezcan los productos que no tengan foto (los campos referidos a la foto en este caso seran nulos)

El ultimo select debería darte lo que buscas....

Quim

Etiquetas: join, mysql, query
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 20:22.