Foros del Web » Programando para Internet » PHP »

Unir varias tablas con JOIN

Estas en el tema de Unir varias tablas con JOIN en el foro de PHP en Foros del Web. Holas gente, no sé si esto tendría que ir aquí o en MySQL, pero bueno, seguro alguien me podrá dar una mano... Estoy desarrollando un ...
  #1 (permalink)  
Antiguo 25/03/2012, 08:12
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Unir varias tablas con JOIN

Holas gente, no sé si esto tendría que ir aquí o en MySQL, pero bueno, seguro alguien me podrá dar una mano...
Estoy desarrollando un sitio donde cada banda de música tendrá su espacio, donde aparecerán las próximas fechas, sus temas, entre otras cosas.

El punto es el siguiente:

Tengo 2 tablas

La primera es Fechas
donde tengo esto:

id
id_lugar
titulo
descripcion
fecha_inicio
fecha_fin
etc

después tengo una tabla llamada fecha_banda

id
id_banda
id_evento


También tengo la tabla bandas, donde tengo el id, titulo, etc


Desde la sección donde muestro la información de las bandas, necesito verificar si hay algun evento relacionado con la banda, para esto tendría que verificar en fecha_banda, si alguna entrada contiene el id_banda de la banda, en el caso de que un evento tenga a mas de una banda, la entrada del evento en fecha_banda aparecería más de una ves, pero bueno, eso no da problemas.

Normalmente lo hago con while, que creo que es lo más fácil pero ví que con JOIN se puede hacer mejor y más rápido, pero la verdad es que ví algunos tutoriales, y no logro entender como debo hacerlo.

Agradecería que alguien me pueda explicar y dar una mano!

Desde ya, muchas gracias!
  #2 (permalink)  
Antiguo 25/03/2012, 08:26
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Unir varias tablas con JOIN

Código MySQL:
Ver original
  1. SELECT * FROM banda b
  2. INNER JOIN fecha_banda fb
  3. ON b.idBanda = fb.idBanda

Con eso traeras todo los eventos de una banda
  #3 (permalink)  
Antiguo 25/03/2012, 08:36
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Unir varias tablas con JOIN

Cita:
Iniciado por HiToGoRoShi Ver Mensaje
Código MySQL:
Ver original
  1. SELECT * FROM banda b
  2. INNER JOIN fecha_banda fb
  3. ON b.idBanda = fb.idBanda

Con eso traeras todo los eventos de una banda
nop, además necesitaría meter el where (WHERE idbanda='".$bandaid."')

pero mira, necesitaría averiguar en fechas_bandas con el where, que eventos de la tabla fechas estan relacionados a ese idbanda, la relación del evento con el idbanda está en fechas_bandas

gracias igual por la respuesta!!!!
  #4 (permalink)  
Antiguo 25/03/2012, 08:59
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Unir varias tablas con JOIN

pon el where entonces

Código MySQL:
Ver original
  1. SELECT * FROM banda b
  2.     INNER JOIN fecha_banda fb
  3.     ON b.idBanda = fb.idBanda
  4.     WHERE idBanda = $idBanda
  #5 (permalink)  
Antiguo 25/03/2012, 09:06
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Unir varias tablas con JOIN

Cita:
Iniciado por HiToGoRoShi Ver Mensaje
pon el where entonces

Código MySQL:
Ver original
  1. SELECT * FROM banda b
  2.     INNER JOIN fecha_banda fb
  3.     ON b.idBanda = fb.idBanda
  4.     WHERE idBanda = $idBanda
logré algo con:

Código PHP:
Ver original
  1. $query5_a_db = "SELECT * FROM bandas b
  2.    INNER JOIN fechas_bandas fb
  3.    ON b.id = fb.idbanda
  4.    WHERE idbanda = '".$bandaid."'";
  5. $ejecuto5_query = mysql_query($query5_a_db, $conexion) or die(mysql_error());
  6.  
  7.  
  8. while($fecha=mysql_fetch_array($ejecuto5_query)){

pero bueno, necesitaría también sacar la información del evento, que estaría en la tabla fecha, y lo sacaría con el idevento que obtengo!
  #6 (permalink)  
Antiguo 25/03/2012, 11:07
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Unir varias tablas con JOIN

Bueno, al final lo logré!

Código MySQL:
Ver original
  1. SELECT * FROM bandas B
  2.      JOIN fechas_bandas F ON B.id=F.idbanda  JOIN fechas E ON E.id=F.idevento INNER JOIN lugares L ON L.id = F.idevento
  3.    
  4.      WHERE B.urltag = $_GET['tag']


Pero solo una cosa, solo me muestra un solo evento!
  #7 (permalink)  
Antiguo 25/03/2012, 13:03
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Unir varias tablas con JOIN

copiame las tablas que quieres unir, y veo como te ayudo .. ya que esto se soluciona con simple SQL
  #8 (permalink)  
Antiguo 26/03/2012, 00:55
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Unir varias tablas con JOIN

Bueno mira, ahí logré hacer diferente la query, pero sigo con un error:

El JOIN hace que solo se muestre 1 solo resultado, si coloco LEFT JOIN solo en el primer resultado aparece los datos del join (osea en el primer array), en el segundo no, este es el código que tengo:

Código SQL:
Ver original
  1. SELECT * FROM fechas E
  2.      JOIN lugares L ON L.id = E.idlugar WHERE E.urltag=$_GET['tag']


las tablas serían fechas y lugares

Última edición por PoLiZe; 26/03/2012 a las 01:23
  #9 (permalink)  
Antiguo 26/03/2012, 06:11
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Unir varias tablas con JOIN

Espero que te sirva!, y que sea lo que buscas.

Código MySQL:
Ver original
  1. FROM fecha_banda
  2. JOIN Fechas
  3.    ON Fechas.id_evento=fecha_banda.id
  4. JOIN tablaBandas
  5.    ON tablaBandas.id=fecha_banda.id_banda
  6. WHERE fecha_banda.id_banda='".$idbanda."'
  7. ORDER by Fechas.fecha_inicio DESC

PoLiZe
JOIN traira solo los resultados que estan en las condiciones y en todas las tablas.
LEFT join traira NULL cuando los resultados que esten en todas las condiciones, PERO que en X tabla no tenga datos a traer.
__________________
Mono programando!
twitter.com/eguimariano
  #10 (permalink)  
Antiguo 26/03/2012, 13:54
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Unir varias tablas con JOIN

Cita:
Iniciado por SirDuque Ver Mensaje
Espero que te sirva!, y que sea lo que buscas.

Código MySQL:
Ver original
  1. FROM fecha_banda
  2. JOIN Fechas
  3.    ON Fechas.id_evento=fecha_banda.id
  4. JOIN tablaBandas
  5.    ON tablaBandas.id=fecha_banda.id_banda
  6. WHERE fecha_banda.id_banda='".$idbanda."'
  7. ORDER by Fechas.fecha_inicio DESC

PoLiZe
JOIN traira solo los resultados que estan en las condiciones y en todas las tablas.
LEFT join traira NULL cuando los resultados que esten en todas las condiciones, PERO que en X tabla no tenga datos a traer.
Gracias por responder!
El problema que tengo ahora es el siguiente:

En fechas tengo 2 entradas, que tienen casi lo mismo, solo que diferente nombre, y diferente ID.

Cuando hago la query con el JOIN (la query que pase antes), la información del lugar, solo me la toma en el primer resultado

En el segundo no aparecen los datos del lugar, pero en el primero sí.

Espero tu respuesta, desde ya muchas gracias!!
  #11 (permalink)  
Antiguo 26/03/2012, 14:32
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Unir varias tablas con JOIN

Perdon, se me mezcló un poco todo, este es el codigo que me da error:


Código MySQL:
Ver original
  1. SELECT * FROM fechas_bandas F
  2. JOIN fechas E ON E.id=F.idevento LEFT JOIN lugares L ON L.id = F.idevento
  3.  
  4. WHERE F.idbanda = '$idbanda'


edit:

Mala mia, el código debería ser así:

Código MySQL:
Ver original
  1. SELECT * FROM fechas_bandas F
  2. JOIN fechas E ON E.id=F.idevento LEFT JOIN lugares L ON L.id = E.idlugar
  3.  
  4. WHERE F.idbanda = '2'


Perdón, muchas gracias a los 2, me fueron de gran ayuda sus respuestas!
  #12 (permalink)  
Antiguo 27/03/2012, 06:35
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Unir varias tablas con JOIN

La verdad me confundis un poco, probas hacer la consulta en PHPMYADMIN, para ver los resultados.
Como dijo HiToGoRoShi, no podemos ayudarte si no vemos las tablas, queres incluir una tercera pero no sabemos su contenido.

Seguro que no te funciona por que hay algun nombre de columna repetido.
__________________
Mono programando!
twitter.com/eguimariano

Etiquetas: join, mysql
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:57.