Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   Ayuda ...Consulta Sql (http://www.forosdelweb.com/f86/ayuda-consulta-sql-586721/)

dante_17 15/05/2008 05:01

Ayuda ...Consulta Sql
 
Hola.
Estoy haciendo una pagina de reservas de hoteles en la que seleccionas hotel, fecha entrada, fecha salida , el numero de habitaciones a reservar y que te muestre las habitaciones disponibles para esas fechas y que no muestre las habitaciones ocupadas.

Alguien sabe como hacerlo?

Mis tablas:

->Hoteles

IDHotel#Nombre#estrellas

->habitaciones
NumeroHabitacion#IDHotel#TipoDeHabitacion

->HabitacionesReservadas
NumeroHabitacion#IDHotel#NumeroDeReserva

->Reservas
NumeroDeReserva#Fechaentrada#FechaSalida

Tengo esta consulta que encontre en este foro pero me muestra las habitaciones que ya tengo reservadas.

Hotel--->101
Fechaentrada: 2008-05-05
Fecha salida: 2008-05-22

SELECT habitaciones.NumeroHabitacion FROM habitaciones WHERE habitaciones.NumeroHabitacion Not In
(SELECT DISTINCT habitacionesreservadas.NumeroHabitacion FROM reservas, habitacionesreservadas
WHERE (reservas.FechaEntr<='2008-05-05'AND reservas.FechaSal>'2008-05-22')
OR (reservas.FechaEntr<='2008-05-22'AND reservas.FechaSal>'2008-05-22')
OR (reservas.FechaEntr>'2008-05-05'AND reservas.FechaSal<'2008-05-22') AND habitacionesreservadas.NumReserva=reservas.NumRese rva)
AND IDHotel='101';

URGENTE.......:-)

GRACIAS.

quimfv 15/05/2008 09:08

Re: Ayuda ...Consulta Sql
 
Mira si te sirve....

http://www.forosdelweb.com/f86/calcu...fechas-586007/

no ireis a la misma clase...

Quim

dante_17 15/05/2008 10:32

Re: Ayuda ...Consulta Sql
 
Hola.

Gracias por responder pero ya he visto este tema y es el que he utilizado para el select pero no me funciona.

jurena 15/05/2008 10:59

Re: Ayuda ...Consulta Sql
 
Esto debe mostrarte las no reservadas para esas fechas:

SELECT habitacion FROM reserva WHERE habitacion NOT IN (SELECT habitacion from reserva where ('2008-05-01' <= fechadesde AND '2008-05-06' >= fechadesde) OR ('2008-05-01' >= fechadesde AND '2008-05-01' <= fechahasta))

y eso, creo, funciona para 2008-05-01 fecha de entrada propuesta y 2008-05-06 fecha de salida.
Por lo demás, creo que es lo que te habías traído. Tendrás que adaptar la consulta a tu tabla y relaciones.

quimfv 15/05/2008 12:57

Re: Ayuda ...Consulta Sql
 
Cita:

SELECT habitaciones.NumeroHabitacion FROM habitaciones WHERE habitaciones.NumeroHabitacion Not In
(SELECT DISTINCT habitacionesreservadas.NumeroHabitacion FROM reservas, habitacionesreservadas
WHERE (reservas.FechaEntr<='2008-05-05'AND reservas.FechaSal>'2008-05-22')
OR (reservas.FechaEntr<='2008-05-22'AND reservas.FechaSal>'2008-05-22')
OR (reservas.FechaEntr>'2008-05-05'AND reservas.FechaSal<'2008-05-22') AND habitacionesreservadas.NumReserva=reservas.NumRese rva)
AND IDHotel='101';
No, no....

Cita:

SELECT habitaciones.NumeroHabitacion FROM habitaciones WHERE habitaciones.NumeroHabitacion Not In
(SELECT DISTINCT habitacionesreservadas.NumeroHabitacion FROM reservas inner join habitacionesreservadas
on habitacionesreservadas.NumReserva=reservas.NumRese rva
WHERE ((reservas.FechaEntr<='2008-05-05'AND reservas.FechaSal>'2008-05-22')
OR (reservas.FechaEntr<='2008-05-22'AND reservas.FechaSal>'2008-05-22')
OR (reservas.FechaEntr>'2008-05-05'AND reservas.FechaSal<'2008-05-22'))
AND HabitacionesReservadas.IDHotel='101';
Intenta esto.

Quim

dante_17 16/05/2008 14:54

Respuesta: Ayuda ...Consulta Sql
 
Con esta consulta no funcionaria igual :

SELECT hoteles.Nombre, NumeroHabitacion FROM hoteles inner join habitaciones ON hoteles.IDHotel=habitaciones.IDHotel
WHERE habitaciones.NumeroHabitacion Not In
(SELECT NumeroHabitacion FROM reservas inner join habitacionesreservadas
on habitacionesreservadas.NumReserva=reservas.NumRese rva
WHERE reservas.FechaEntr>='2008-05-05'AND reservas.FechaSal<='2008-05-22')

Porque me mostrara las habitaciones que no esten en ese intervalo de fecha

gnzsoloyo 17/05/2008 17:23

Respuesta: Ayuda ...Consulta Sql
 
Podríamos probar algo así:
Código:

SELECT H.Nombre HA.NumeroHabitacion, HA.TipoHabitación
FROM HOTELES H INNER JOIN HABITACIONES HA USING (IDHOTEL)
INNER JOIN HABITACIONESRESERVADAS HR USING(NUMEROHABITACION, IDHOTEL)
INNER JOIN RESERVAS R USING (NUMERODERESERVA)
WHERE (@FechaEntrada NOT BETWEEN R.FechaEntrada AND R.FechaSalida)
AND (@FechaSalida NOT BETWEEN R.FechaEntrada AND R.FechaSalida);

Entendiendo que los valores @FechaEntrada y @FechaSalida son valores ingresados dentro de variables, y por lo tanto se deben incorporar en la llamada a la sentencia, según sea el lenguaje que estés usando.

Existiría otro método a mi juicio, bastante eficiente, pero que requiere el uso de Store Procedures.


La zona horaria es GMT -6. Ahora son las 21:30.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.