Consultas 'reservas' en mysql entre fechas

Matjazz

asdf
Se incorporó
18 Agosto 2007
Mensajes
1.196
Holas,

Estoy desarrollando un sistema de reservas de instrumentos para un pañol.

Resulta que cada reserva tiene un inicio y fin de la reserva, de tipo DATETIME (ejemplo: 2015-12-29 21:00:00 )

No he podido dar con la forma de hacer la consulta, de que al poner un tiempo de la reserva, me indique los instrumentos que están reservados en ese intervalo. Eso porque al hacer la consulta, puedo obtener los instrumentos que están dentro del intervalo, pero no los que están con un desplazamiento.

Ejemplos de los casos que debería devolver:

C5Eov7G.png


El caso 1 ya lo devuelve, pero en la medida que voy agregando los "casos" en la consulta me termina devolviendo todos los registros de la tabla, y no solo los que tienen reserva.
 

nibal2

pajarón nuevo
MOD
Se incorporó
15 Junio 2007
Mensajes
2.897
Deberías poner tu consulta para mirarla y corregirla.

En el caso 2 y 3 podrías preguntar si la FECHA_INICIO O la FECHA_FIN están dentro del rango.

Para la última, no se me ocurre en estos momentos.
 
Upvote 0

Matjazz

asdf
Se incorporó
18 Agosto 2007
Mensajes
1.196
esta es la consulta que llevo, ahora anda un poco mejor, pero aún no termina de funcionar

PHP:
SELECT * FROM peticion_equipos WHERE
((peticion_equipos.inicio < '2015-12-28 15:00:00' AND fin > '2015-12-29 21:00:00' ) AND (peticion_equipos.fin > '2015-12-28 15:00:00' AND inicio < '2015-12-29 21:00:00' ))  or
((peticion_equipos.inicio > '2015-12-28 15:00:00' AND fin > '2015-12-29 21:00:00' ) AND (peticion_equipos.fin < '2015-12-28 15:00:00' AND inicio < '2015-12-29 21:00:00' ))  or
((peticion_equipos.inicio > '2015-12-28 15:00:00' AND fin < '2015-12-29 21:00:00' ) AND (peticion_equipos.fin < '2015-12-28 15:00:00' AND inicio > '2015-12-29 21:00:00' ))  or
((peticion_equipos.inicio < '2015-12-28 15:00:00' AND fin < '2015-12-29 21:00:00' ) AND (peticion_equipos.fin > '2015-12-28 15:00:00' AND inicio > '2015-12-29 21:00:00' ))
 
Upvote 0

nibal2

pajarón nuevo
MOD
Se incorporó
15 Junio 2007
Mensajes
2.897
PHP:
SELECT * FROM peticion_equipos WHERE
(peticion_equipos.inicio > '2015-12-28 15:00:00' AND peticion_equipos.inicio < '2015-12-29 21:00:00' )
OR
(peticion_equipos.fin > '2015-12-28 15:00:00' AND peticion_equipos.fin < '2015-12-29 21:00:00' )


Eso debería resolver los casos 1,2 y 3

Si me desocupo te ayudo con el caso 4
 
Upvote 0

Matjazz

asdf
Se incorporó
18 Agosto 2007
Mensajes
1.196
PHP:
SELECT * FROM peticion_equipos WHERE
(peticion_equipos.inicio > '2015-12-28 15:00:00' AND peticion_equipos.inicio < '2015-12-29 21:00:00' )
OR
(peticion_equipos.fin > '2015-12-28 15:00:00' AND peticion_equipos.fin < '2015-12-29 21:00:00' )


Eso debería resolver los casos 1,2 y 3

Si me desocupo te ayudo con el caso 4

puta wn! muchas gracias por tu ayuda. Ya lo resolví

El asunto es que hay que comparar los 4 casos, y al final poner una condicion de que el inicio de la reserva sea menor al de la peticion, y el fin de la reserva sea mayor al de la peticion

PHP:
SELECT id_equipo FROM peticion_equipos WHERE
            ((peticion_equipos.inicio < '$inicio' AND fin > '$fin' ) or
             (peticion_equipos.inicio > '$inicio' AND fin > '$fin' ) or
             (peticion_equipos.inicio < '$inicio' AND fin < '$fin' ) or
            (peticion_equipos.inicio > '$inicio' AND fin < '$fin' )) AND
            (peticion_equipos.fin > '$inicio' AND inicio < '$fin' )
            GROUP BY id_equipo";


gracias!!
 
Upvote 0
Subir