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

Ayuda ...Consulta Sql

Estas en el tema de Ayuda ...Consulta Sql en el foro de Mysql en Foros del Web. Hola. Estoy haciendo una pagina de reservas de hoteles en la que seleccionas hotel, fecha entrada, fecha salida , el numero de habitaciones a reservar ...
  #1 (permalink)  
Antiguo 15/05/2008, 05:01
 
Fecha de Ingreso: abril-2008
Mensajes: 12
Antigüedad: 16 años
Puntos: 0
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.

Última edición por dante_17; 15/05/2008 a las 07:08
  #2 (permalink)  
Antiguo 15/05/2008, 09:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Ayuda ...Consulta Sql

Mira si te sirve....

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

no ireis a la misma clase...

Quim
  #3 (permalink)  
Antiguo 15/05/2008, 10:32
 
Fecha de Ingreso: abril-2008
Mensajes: 12
Antigüedad: 16 años
Puntos: 0
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.
  #4 (permalink)  
Antiguo 15/05/2008, 10:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
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.
  #5 (permalink)  
Antiguo 15/05/2008, 12:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
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
  #6 (permalink)  
Antiguo 16/05/2008, 14:54
 
Fecha de Ingreso: abril-2008
Mensajes: 12
Antigüedad: 16 años
Puntos: 0
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
  #7 (permalink)  
Antiguo 17/05/2008, 17:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 14:14.