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

Subconsultas con 3 tablas

Estas en el tema de Subconsultas con 3 tablas en el foro de Mysql en Foros del Web. Os pongo en contexto: Es una aplicación de alquiler de bicicletas tipo Bicing (barcelona) donde hay estaciones que pertenecen a subzonas y operarios que trabajan ...
  #1 (permalink)  
Antiguo 27/04/2012, 05:04
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 21 años, 5 meses
Puntos: 2
Subconsultas con 3 tablas

Os pongo en contexto:

Es una aplicación de alquiler de bicicletas tipo Bicing (barcelona) donde hay estaciones que pertenecen a subzonas y operarios que trabajan por subzonas.

Los operarios se dirigen a las estaciones para suministrarlas de bicis cuando las estaciones están vacías o retirar bicis cuando las estaciones están completas. Y reparar las posibles bicis averiadas.

El caso es que los operarios reciben unas hojas de ruta, con las estaciones llenas, estaciones vacías y las bicis de su subzona averiadas.

Nos centraremos en el primer caso, estaciones llenas, el operario pasa a retirar las bicicletas de esas estaciones, en el listado le aparecerá las direcciones de esas estaciones.

Para esto trabajamos con 3 tablas:

llenas (idllenas, idmantenimiento)
mantenimiento (idmantenimiento,idestacion,idoperario,idsubzona)
estaciones (idestaciones, direccion,...)


Aclaración el idmantenimiento coincide con el idestacion

El idoperario nos viene dado al entrar en su ficha


Entonces lo que quiero obtener es la dirección de las estaciones llenas de la subzona del operario

La tabla llenas devuelve varios registros de aquí obtenemos el idmantenimiento, con lo que nos iremos a la tabla mantenimiento a consultar si esa estación pertenece o no a la subzona del operario, en el caso que así sea consultaremos la tabla estaciones para obtener la dirección.

Bueno después de soltar este tocho espero a verme explicado bien :)

Se que son subconsultas, pero me lío, a ver si me podéis ayudar, gracias


bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #2 (permalink)  
Antiguo 27/04/2012, 17:59
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años, 7 meses
Puntos: 12
Respuesta: Subconsultas con 3 tablas

hola pues a primeras no entendi bien como funcionan tus tablas pero con paciencia se puede armar la consulta , me queda la duda de como es que generas el idmantenimiento y como se enlaza con mantenimiento pero supongo que el idmantenimiento es un incrementable o algo asi y es un valor unico y de ahy lo pasas al campo idmantenimiento de la tabla mantenimiento y asignar tambien el id de la estacion , si asi es algo asi cmo funciona se puede generar una consulta con joins yo la haria de la siguiente forma


select t1.idllenas,t2.idoperario,t3.direccion from llenas ast t1 inner join mantenimiento as t2 on t1.idmantenimiento = t2.idmantenimiento inner join estaciones as t3 on t2.idestacion = t3.idestacion

si te entendi esto te dara una lista , puedes agregar los campos que quieras en el orden que quieras pero manteniendo los inner en orden para poder obtener los resultados ordenados , ojo te recomiendo le eches un ojo al funcionamiento de los joins , asimismo puedes poner la condicionante where al final del codigo para poder filtrar los resultados espero te sea de ayuda
  #3 (permalink)  
Antiguo 30/04/2012, 02:31
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 21 años, 5 meses
Puntos: 2
Respuesta: Subconsultas con 3 tablas

Cita:
Iniciado por fahs82 Ver Mensaje
hola pues a primeras no entendi bien como funcionan tus tablas pero con paciencia se puede armar la consulta , me queda la duda de como es que generas el idmantenimiento y como se enlaza con mantenimiento pero supongo que el idmantenimiento es un incrementable o algo asi y es un valor unico y de ahy lo pasas al campo idmantenimiento de la tabla mantenimiento y asignar tambien el id de la estacion , si asi es algo asi cmo funciona se puede generar una consulta con joins yo la haria de la siguiente forma


select t1.idllenas,t2.idoperario,t3.direccion from llenas ast t1 inner join mantenimiento as t2 on t1.idmantenimiento = t2.idmantenimiento inner join estaciones as t3 on t2.idestacion = t3.idestacion

si te entendi esto te dara una lista , puedes agregar los campos que quieras en el orden que quieras pero manteniendo los inner en orden para poder obtener los resultados ordenados , ojo te recomiendo le eches un ojo al funcionamiento de los joins , asimismo puedes poner la condicionante where al final del codigo para poder filtrar los resultados espero te sea de ayuda
En esta consulta, me devuelves el idoperario, pero el idoperario, es el dato que ya tienes, y es con el que realizas la consulta.

Si el idmantenimiento es un id incremental automático y hay tantos mantenimientos como estaciones hay, por eso coinciden, las estaciones hay las que hay, no aumentan ni disminuyen.


bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #4 (permalink)  
Antiguo 30/04/2012, 02:38
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 21 años, 5 meses
Puntos: 2
Respuesta: Subconsultas con 3 tablas

Si!! faltaba el where:

Código PHP:
select t1.idmantenimientot3.direccion from llenas as t1 
inner join mantenimiento 
as t2 on t2.idmantenimiento t1.idmantenimiento 
inner join estaciones 
as t3 on t3.idestacion t2.idestacion 
where t2
.idoperario 34 
Muchas gracias


bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332

Última edición por bichomen; 30/04/2012 a las 03:30

Etiquetas: registros, subconsultas, tabla, tablas
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 11:23.