Ver Mensaje Individual
  #7 (permalink)  
Antiguo 07/03/2014, 03:13
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: relacionar tres tablas

Primero tienes que hacer un analisias de las relaciones....

tblzona 1 -- n tbllocal: relación es uno a n es decir un bar tiene una zona pero una zona puede tener n bares

tblactividad n -- m tbllocal: relación n a m ya que un bar puede realizar n actividades y cada actividad la realizan m bares. Lo ves claro?

Para almacenar una relacion n:m necesitas una tabla intermedia o tabla de relación.

tblactividad
id_Actividad
str_Descripcion

tblzona
id_Zona
str_Nombre

tbllocal
id_Local
str_Nombre_Local
id_Zona

(fijate que he quitado el campo id_Actividad, ya que solo podías almacenar una actividad y necesitas n)

tblRelLocalActividad
id_RelLocalActividad
id_Actividad
id_Local

Aqui si puedes almacenar n actividades para un local y m locales para una activiadad. El campo id_RelLocalActividad es innecesario puesto que puede substituirse por una PK compuesta por los otros dos campos, pero yo prefiero crear esa PK simple y agregar un indice único compuesto de los otros dos campos.

Una vez corregida la estructura de datos

Código MySQL:
Ver original
  1. SELEC l.str_Nombre_Local,
  2.            z.str_Nombre
  3. FROM (tbllocal l INNER JOIN tblzona z
  4.                        ON l.id_Zona=z.id_Zona)
  5.                  INNER JOIN tblRelLocalActividad r
  6.                        ON l.id_Local=r.id_Local
  7. WHERE z.id_Zona=X
  8.             AND r.id_Actividad=Y;

Esto dará los bares de la zona X que realizen la actividad Y.
Modificando la clausula WHERE puedes hacer lo que quieras....
Puedes agregar otro JOIN con tblactividad si necesitas usar el nombre de la actividad.

Agur
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 07/03/2014 a las 03:24