Comunidad de diseño web y desarrollo en internet online

INNER JOIN con 3 tablas en MySQL - PHP

Citar            
MensajeEscrito el 24 Feb 2006 01:09 am
A ver les explico, un poco el caso, un curso puede ser dictados en varias zonas y en una zona se pueden dictar varios cursos, es decir, relación N:M , entonces tengo 3 tablas para eso:

cursos (id, titulo, descripction.... otros campos)
zona(id, ciudad, ubicacion)
relCursoZona(id, idCurso, idZona).

la sentencia SQL que cree para esto, fue esta:

Código :

$sql=   "SELECT cursos.*, zona.ciudad, zona.ubicacion FROM relCursoZona INNER JOIN cursos INNER JOIN zona ON cursos.id=relCursoZona.idCurso ON zona.id=relCursoZona.idZona GROUP BY relCursoZona.idCurso ";


Ok, supongo que esa consulta esta bien, pero en caso de que sea asi, como saber si un curso es dictado en varias zonas... es decir, quisiera imprimir algo asi:

Curso 1, dictado en: Caracas, DF Mexico
Curso 2, dictado en: DF Mexico
Curso 3, dictado en: Ciudad Guayana.

please help :P

PD: evitense los comentarios del uso de alias :P

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 24 Feb 2006 01:30 am
ahh ya olvidenlo me estaba ahogando en un vaso de agua.

por si acaso, la solución es sin INNER JOIN algo asi para mi caso:

Código :

$sql= "SELECT cursos.*, zona.ciudad, zona.ubicacion FROM cursos, zona, relCursoZona WHERE cursos.id=relCursoZona.idCurso AND zona.id=relCursoZona.idZona ORDER BY relCursoZona.id ";


saludos ^^

PD: F tenias razon, aunque te habia convencido :lol:

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 24 Feb 2006 03:37 pm
Cuando necesitamos combinar registros de dos o más tablas, lo ideal es utilizar un JOIN, ya que en eficiencia es lo mejor. Además la clausula WHERE, generalmente es un condicional selector, no un criterio para combinar tablas. A lo mejor este query te sirve:

Código :

SELECT cursos.*, zona.ciudad, zona.ubicacion 
FROM relCursoZona LEFT JOIN cursos
ON relCursoZona.id = cursos.idCurso
LEFT JOIN zona
ON zona.id=relCursoZona.idZona 
ORDER BY relCursoZona.id


:wink:

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 25 Feb 2006 02:24 am
sabia que me ibas corregir :P , thanks Dano ^^

estamos hablando ^^

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 20 Mar 2013 02:53 pm

Dano escribió:

Cuando necesitamos combinar registros de dos o más tablas, lo ideal es utilizar un JOIN, ya que en eficiencia es lo mejor. Además la clausula WHERE, generalmente es un condicional selector, no un criterio para combinar tablas. A lo mejor este query te sirve:

Código :

SELECT cursos.*, zona.ciudad, zona.ubicacion 
FROM relCursoZona LEFT JOIN cursos
ON relCursoZona.id = cursos.idCurso
LEFT JOIN zona
ON zona.id=relCursoZona.idZona 
ORDER BY relCursoZona.id


:wink:



si añadimos una tabla más, por ejemplo alumno, tendremos:

lo anterior:
----------------
cursos (id, titulo, descripction.... otros campos)
zona(id, ciudad, ubicacion)
relCursoZona(id, idCurso, idZona).

más 2 tablas(pq es una relacion n:m al igual que la anterior):
-------------------------------------------------------------------
alumno(id,nombre,apellidos,...)
relCursoAlumno(id, idCurso, idAlumno)

Los alumnos pueden inscribirse a más de un curso y logicamente en un curso puede haber varios alumnos.

Entonces sin necesitamos saber los alumnos que estan inscrito en esos cursos, habría que:
1) realizarlo en la misma consulta (1 consulta en total)
2) realizar otra consulta identica a la anterior (es decir dos consultas en total)

que es más productivo para una aplicación en PHP? es decir con cual gano más velocidad.

en el caso de que fuese una solo consulta, ¿como sería la consulta en SQL?

En un modelo E-R bien definido y sin redundancias, muchas veces tenemos un sistema complejo donde una misma tabla se relaciona con muchas tablas. Y necesitamos sacar todos sus datos relacionados para mostrarlos en una pagina web.

un saludo y gracias.

Por oscarlosan

73 de clabLevel



 

firefox

 

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