entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

¿Cómo ver disponibilidad habitaciones hotel?

Hola, estoy queriendo enseñar en la web todas las habitaciones disponibles que tengo entre dos fechas cuando la cantidad (disponibilidad) sea mayor a zero.

Si yo hago eso:

$query="Select id_habitacio from cantidad where id_hotel='1' and data between '".$inicio."' and '".$fin."' and cantidad>='".$numeroHabitaciones."'";

Me devuelve tres registros, uno de una habitación que la cantidad es mayor que $numeroHabitaciones en el primer dia y otra habitación que me sale repetida dos veces porque hay cantidad mayor que $numeroHabitaciones en el dia fin y en el dia inicio (entre inicio y fin en la primera prueba que he hecho solo hay un dia de diferencia, osea dos noches)

Yo solo quiero mostrar las habitaciones que la cantidad es mayor que $numeroHabitaciones pero en las dos noches, pero claro me muestra la primera habitación y la segunda porque la primera tiene mayor que $numeroHabitaciones en el primer dia.

$numeroHabitaciones= es el número de habitaciones que el usuario ha seleccionado. Por ejemplo 1 habitación

No sé cómo controlar esto.

Muchas gracias,

Gemma

0voto

carlossevi comentado

¿Puedes darnos la estructura de la tabla cantidad? Viendo que hay varios registros por cada habitación ¿Qué tipo de datos guarda esa tabla?

0voto

gpinyol10 comentado

Si claro,
la tabla cantidad tiene:

id_cantidad, id_habitacion, id_hotel, data, cantidad

entonces por ejemplo yo guardo para cada habitacion un registro con la cantidad (disponibilidad) disponible en la fecha.
Por ejemplo

Select * from cantidad where id_hotel='1' and data between '2016-03-17' and '2016-03-18' and cantidad>='1'

Me sale tres registros:

id_cantidad: 18, id_habitacion: 1, id_hotel:1, data: 2016-03-17, cantidad: 5
id_cantidad: 18, id_habitacion: 2, id_hotel:1, data: 2016-03-17, cantidad: 10
id_cantidad: 18, id_habitacion: 2, id_hotel:1, data: 2016-03-18, cantidad: 20

0voto

carlossevi comentado

¿Qué significa el campo id_cantidad? ¿Cuál es la clave primaria de la tabla?

Entiendo bien lo que quieres, ¿quieres comprobar que haya cantidad positiva en todas las fechas intermedias entre fecha inicial y final?

0voto

gpinyol10 comentado

La clave primaria es id_cantidad, pero en este caso no la utilizo.
Si, exactamente, es eso lo que quiero, que me enseñe solo la id_habitacion que tenga cantidad en todas las fechas.
Cómo puedo hacerlo?
Gracias

0voto

carlossevi comentado

id_cantidad no puede ser clave primaria según los datos que nos enseñas porque todos los registros compartirían clave.

0voto

gpinyol10 comentado

No perdona, que he copiado pegado y no he cambiado el valor de id_cantidad 18, pero si es clave primaria

0voto

gpinyol10 comentado

La primera id_cantidad del ejemplo anterior es 18, la segunda 71 y la tercera 72

0voto

Peter comentado

@gpinyol10 por favor publica tus comentarios como comentarios y no como respuestas de la pregunta.

Saludos.

1 Respuesta

1voto

Leonardo-Tadei Puntos227320

Hola @gpinyol10,

para obtener un solo registro que sumarize la cantidad de habitaciones, la query debe tener la forma:

$query="SELECT SUM(id_cantidad) AS total, id_habitacion
FROM cantidad where id_hotel='1' and data between '".$inicio."' and '".$fin."' and cantidad>='".$numeroHabitaciones."'
GROUP BY id_habitacion";

Estoy agregando en la proyección la habitación y la cantidad para que se pueda ver, pero el id_habitacion no es necesario para la consulta.

De esta manera estás sumando la cantidad de habitaciones, y al agrupar por el id_habitación, lo que se obtiene es la suma de cada una.

Tu pregunta igual es un poco confusa para mi, y no estoy seguro de que sean esto lo que te está haciendo falta.

Saludos cordiales

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta