Comunidad de diseño web y desarrollo en internet online

joins con más de 3 tablas

Citar            
MensajeEscrito el 21 Mar 2013 01:20 pm
despues de leer este tutorial: [url=http://www.cristalab.com/tutoriales/consulta-sql-a-mas-de-dos-tablas-con-join-c77632l/][/url]

me surge el siguiente problema:

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

lo anterior:
----------------
usuarios (id, …)
bodegas(id, …)
us2bod(id, idUsuario, idBodega).

más 2 tablas(pq es una relación n:m al igual que la anterior):
-------------------------------------------------------------------
idiomas(id,…)
us2idi(id, idUsuario, iIdioma)

Los usuarios pueden hablar más de un idioma y lógicamente un determinado idioma puede ser hablado por varios usuarios.

Entonces sin necesitamos saber los usuario con sus bodegas e idiomas, habría que:
1) realizarlo en la misma consulta (1 consulta en total)
2) realizar otra consulta idéntica 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 se pudiera hacer en una una sola consulta, ¿como sería la consulta en SQL?


un saludo y gracias.

Por oscarlosan

73 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2013 02:38 am
SELECT DISTINCT u.id, i.id, b.id FROM us2bod ub INNER JOIN usuarios u ON (u.id = ub.idUsuario) INNER JOIN bodegas b ON (b.id = ub.idBodega) INNER JOIN us2idi ui ON (u.id = ui.idUsuario) INNER JOIN idiomas i ON (i.id = ui.iIdioma)

Intenta con esa Query

Por robzdc

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2013 07:35 am
A veces es buena idea incluir todos los datos de las tablas, los JOINS son un atajo a consultas condicionales, te sugeriría más bien intentar algo así:

Código :

usuario (id, …)
bodega (id, …)
usuario_bodega (id, usuario_id, bodega_id)


Código :

SELECT usuario.*, bodega.* FROM usuario, bodega, usuario_bodega WHERE usuario.id=usuario_bodega.usuario_id AND bodega.id=usuario_bodega.bodega_id;


Pos supuesto cambiando usuario.*, bodega.* por los campos que requieres.
También puedes incluir una condición adicional antes del ;

Nota: He cambiado los nombres de los campos para que sea más fácil de entender la consulta.

Por NeftaliYagua

18 de clabLevel



Genero:Masculino  

Activista, Desarrollador, Empresario

chrome

 

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