Foros del Web » Programando para Internet » PHP »

3 consultas 2 tablas

Estas en el tema de 3 consultas 2 tablas en el foro de PHP en Foros del Web. Tengo estas 3 consultas: Código PHP: $sql  =  "select idzona from mantenimiento where idestacion = " . $idestacion ; $sql  =  "select * from mantenimiento where idzona= " . $idzona ; $sql  =  "select * from puestos where idestacion = " . $idestacion . " and estado = 0" ...
  #1 (permalink)  
Antiguo 29/03/2012, 00:43
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
3 consultas 2 tablas

Tengo estas 3 consultas:

Código PHP:
$sql "select idzona from mantenimiento where idestacion = ".$idestacion;
$sql "select * from mantenimiento where idzona= ".$idzona;
$sql "select * from puestos where idestacion = ".$idestacion." and estado = 0"
En la primera consulta, paso el ID de la estación, para averiguar la zona a la que pertenece la estación.
En la segunda consulta averiguo que estaciones hay en esa zona.
Y en la ultima consulta compruebo en cada una de esas estaciones cuanto puestos están libres.

¿Lo puedo hacer todo en una consulta pasandole únicamente el idestacion?


bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #2 (permalink)  
Antiguo 29/03/2012, 01:07
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Exclamación Respuesta: 3 consultas 2 tablas

Está claro que si ya tienes el idzona podrías desplegar todas sus estaciones, que es lo que planteas y no habría necesidad de la primera consulta, hacer algo como:

Código:
mysql> SELECT m.idestaciones FROM mantenimiento m WHERE m.idzona = {$idzona}
Y es evidente que por cada estación se estaría repitiendo la zona a la cual pertenece, al menos en el diseño que planteas, supongo una tabla relación zonas y estaciones.

Y esta parte sí que la dudo, ya que no me hago idea bien a la relación, pero aún así:

Código:
mysql> SELECT m.*, p.* FROM mantenimiento m INNER JOIN puestos p ON p.idestacion = m.idestacion WHERE m.idzona = {$idzona} AND p.estado = 0
Para una zona específica estaría mostrando las diferentes estaciones y sus respectivos puestos donde el estado es 0.

Revisa qué tal te va, es lo que alcanzo a abstraer con la información que ofreces, si puedes, publica la definición de tus tablas.

Buena suerte.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.

Última edición por JairLizcano; 29/03/2012 a las 01:16
  #3 (permalink)  
Antiguo 29/03/2012, 01:40
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Respuesta: 3 consultas 2 tablas

Hay 2 tablas:

Una mantenimiento con estos 2 campos:

idestacion
idzona

varias estaciones pueden y tienen una misma zona, en ningún momento se que zona tiene asignada si no hago antes una consulta.

Luego hay otra tablas denominada puestos, con 3 campos:

idestacion
posicion
estado

Lo que quiero que haga la consulta, es que pasando solo el ID de la estación, busque a que zona pertenece, mire que otras estaciones pertenecen y dentro de cada estación a través de la tabla puestos mire el estado (estado=0) de cada puesto para ver si el puesto esta disponible o no. Me falto añadir que deberían estar agrupados por puesto y sumar el total de puestos libres.

Lo que debe mostrar la consulta:

Código:
Estación 3 tiene 4 puestos disponibles
Estación 30 tiene 2 puestos libres
Estación 4 tiene 5 puestos libres
etc
Espero que ahora quede un poco más claro. La tabla puestos abarca todos los puestos de todas las estaciones y cada puesto esta relacionado con su estación por el campo idestacion.


bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #4 (permalink)  
Antiguo 29/03/2012, 02:16
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Exclamación Respuesta: 3 consultas 2 tablas

Prueba con lo siguiente y me dices qué tal te va:

Código PHP:
SELECT p.idestacion AS estacionCOUNT(p.idpuesto) AS puestos_libres 
     FROM puestos p
          WHERE p
.idestacion IN (SELECT m.idestacion FROM mantenimiento m WHERE m.idzona = (SELECT m.idzona FROM mantenimiento m WHERE m.idestacion = {$idestacion}))
          AND 
p.estado 
         GROUP BY p
.idestacion 
Buena suerte.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.
  #5 (permalink)  
Antiguo 29/03/2012, 02:25
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Respuesta: 3 consultas 2 tablas

Muchisimas gracias!! era lo que buscaba


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

Etiquetas: sql, 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 08:19.