Foros del Web » Programando para Internet » PHP »

validar según el número de registros que haya

Estas en el tema de validar según el número de registros que haya en el foro de PHP en Foros del Web. Hola a todos. En mi sistema de reservas, tengo que en el administrador puede introducir el tipo de habitación (individual, doble....) y el número que ...
  #1 (permalink)  
Antiguo 27/10/2008, 13:14
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
validar según el número de registros que haya

Hola a todos. En mi sistema de reservas, tengo que en el administrador puede introducir el tipo de habitación (individual, doble....) y el número que de cada una hay. por ejemplo:

individual------2
dobles---------3

mi pregunta es:

como puedo hacer para validar que si un usuario solicita una individual en un periodo de fechas determinado, existen habitaciones de ese tipo disponibles teniendo en cuenta que solo hay dos de ese tipo. el validar en un intervalo de fechas ya lo hago. lo que no logro es sumarle a esa validación este otro requisito. por lo tanto, sería una doble validación:

1º) comprobar que en ese intervalo de fechas no han reservado nadie.
2º) comprobar que existen de ese tipo de habitacion disponible porque no se ha superado el número máximo.

tengo dos tablas:

tabla 'habitaciones':

idhabitacion--------autonumerico
tipo-------------------clase de habitación (individual, doble...)
cantidad-------------número de habitaciones que hay de ese tipo

tabla 'reservas':

idreserva-------------autonumerico
fechaentrada--------fecha de entrada
fechasalida-----------fecha de salida
habitacionid----------tipo de habitación a reservar (es el idhabitacion de la tabla habitaciones)
cantidad--------------número de habitaciones de ese tipo que desea reservar


alguna ayuda?
  #2 (permalink)  
Antiguo 27/10/2008, 13:23
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 6 meses
Puntos: 43
Respuesta: validar según el número de registros que haya

Creo que tendrías que hacer primero un select en la tabla de reservas con las fechas especificadas y hacer la suma de las cantidades de las filas retornadas y comparar con la cantidad que esta en la tabla de habitaciones.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 27/10/2008, 15:32
Avatar de Gerifaltus  
Fecha de Ingreso: junio-2005
Ubicación: Tabasco, México
Mensajes: 180
Antigüedad: 19 años, 4 meses
Puntos: 4
Respuesta: validar según el número de registros que haya

estibaliz2006, podrías colocar la sentencia SQL y el codigo php que usas para consultar por fechas, creo que la respuesta a la segunda pregunta ya está implicita en la consulta que haces cuando estas buscando por fechas.

Saludos.
__________________
:::.. Todo tiene un ¿Por qué? y un ¿Para qué? ..:::
:::.. Todo se reduce a un SI y a un No ..:::
  #4 (permalink)  
Antiguo 28/10/2008, 00:48
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

para validar que están reservadas unas fechas hago esta consulta:

Código PHP:
$busqueda="select * FROM reserva where $fechaentrada>= fechaentrada AND fechasalida  <=$fechasalida OR $fechasalida>= fechaentrada AND fechasalida  <= $fechasalida;
$registro=mysql_query($busqueda); 
//Con eso lo que hago es buscar si la fecha que yo pongo de entrada o de salida está en algún intervalo ya reservado. Si es así
if (mysql_num_rows($registro) != 0)  

    echo "
fechas reservadas";

a continuación hago un else para introducir la reserva en caso de que estuvieran disponibles. como añado ahora el comprobar si todavía existen habitaciones de ese tipo teniendo en cuenta su número?
  #5 (permalink)  
Antiguo 28/10/2008, 06:09
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

alguna ayuda?
  #6 (permalink)  
Antiguo 28/10/2008, 06:21
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Respuesta: validar según el número de registros que haya

La verdad creo que es un poco complicado sin recorrer dia a dia el intervalo. Puedes hacer un bucle consultando por cada dia del periodo a reservar, mirando cuantas habitaciones estan reservadas y si el numero es menor al maximo de habitaciones, seguir con el siguiente dia.
  #7 (permalink)  
Antiguo 28/10/2008, 06:50
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

bufff..... y cómo hago eso?
  #8 (permalink)  
Antiguo 28/10/2008, 07:20
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 6 meses
Puntos: 43
Respuesta: validar según el número de registros que haya

Según el rango de fechas para la nueva reserva, debes hacer un select de todas las reservas que esten en ese rango de fechas. Luego cuando haces el ciclo del fetch_array vas comparando la cantidad total de reservas permitidas para esa habitación con las reservas que sacaste del select para saber si puedes realizar la reserva solicitada. Por ejemplo inmaginate que la nueva reserva sea del 2008-10-10 al 2008-10-20, debes hacer un select en tu tabla de reservas, con estas fechas y el tipo de haitación, luego ir sumando el campo cantidad de esta tabla y al final restar la cantidad total de habitaciones (en la tabla habitaciones), con este calculo, si aún así esta resta es mayor o igual que la cantidad que se desea reservar puedes hacer la reserva, de otro modo no.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #9 (permalink)  
Antiguo 28/10/2008, 09:32
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

buff....hechita un lío. a ver.

yo tengo el número de habitaciones que hay de cada clase en la tabla 'habitaciones', que recordad tenía:

tabla 'habitaciones':

idhabitacion--------autonumerico
tipo-------------------clase de habitación (individual, doble...)
cantidad-------------número de habitaciones que hay de ese tipo


ahora en la tabla 'reservas' lo que tengo que ver es si la habitación que yo quiero reservar hay disponible porque no se haya completado toda la cantidad que hay de las mismas que es el campo 'cantidad' de la tabla 'habitación.

yo lo que he obtenido es sacar todos los registros pertenecientes a un tipo de habitación que hay en un determinado intervalo de fechas:

Código PHP:
$busqueda="select * FROM reservas where $fechaentrada >= fechaentrada AND $fechasalida  <= fechasalida OR $fechasalida>= fechaentrada AND $fechasalida  <=fechasalida AND habitacionid=$habitacion "
donde la variables son:
$fechaentrada=fecha de entrada que le paso x el formulario
$fechasalida=fecha de salida que le paso x el formulario
$habitacion=es el tipo de habitación que se corresponde con el idhabitacion de la tabla habitaciones

a partir de aquí me pierdo. considero que habría que contar los registros que hay de esa habitación en el intervalo de fechas elegido y una vez contados compararlos con el número total de habitaciones que de ese tipo hay (es decir, con el campo 'cantidad' de la tabla habitaciones). pero no soy capaz de cuadrar eso. por favor, necesito vuestra ayuda.

gracias
  #10 (permalink)  
Antiguo 28/10/2008, 09:50
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 6 meses
Puntos: 43
Respuesta: validar según el número de registros que haya

Viendolo mejor ahora, es un poco más complejo, porque dentro de ese rango es posible que se hayan reservado habitaciones y desocupado, para ser más exactois, creo que la validación deberá darse por día.
Podrías hacer el select de las reservas guardar el id, el campo de cantidad y las fechas en un arreglo y luego en una función verificar reserva por reserva, sumando y restando el campo de cantidad ya sea que según la fecha se haya ocupado o desocupado las reservas.

Espero haberme explicado.
Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #11 (permalink)  
Antiguo 28/10/2008, 12:50
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

me dejas más liada aún...por días? bueno el hecho de que se hagan reservas y se anularan quedaría en manos del administrador del sitio para modificar esa reserva. no me preocupa tanto ese tema. si me preocupa el tema de los días o en definitiva, si se decide por periodos reservados, como hacerlo....estoy superliada....alguien me ayuda?
  #12 (permalink)  
Antiguo 28/10/2008, 13:20
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 6 meses
Puntos: 43
Respuesta: validar según el número de registros que haya

Bueno solo suma las cantidades de todos los registros de las reservas en ese rango de fechas y a la cantidad total le restas esto, el resultado es la cantidad de habitaciones disponibles, lo que compararas con la cantidad de habitaciones solicitadas.
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #13 (permalink)  
Antiguo 28/10/2008, 13:43
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 16 años, 1 mes
Puntos: 8
Respuesta: validar según el número de registros que haya

Tengo la impresión de que con las sugerencias de the_web_saint ya lo tienes todo para desarrollar el código necesario, aunque quizás podrías plantearte una alternativa que, si bien no es óptima, podría ayudarte a simplificar el problema:

Tienes una tabla 'habitaciones', que "gestiona" el administrador, otra tabla 'reservas' de la que hace uso el usuario y... por qué no creas otra tabla que sea, por ejemplo, 'ocupación' que controlaría (llenaría, vaciaría, consultaría) el programa para todas esas funciones que necesitas?

La estructura podría ser tan sencilla como:

idreserva, idhabitación, fecha, cantidad

es decir, prácticamente como la tabla 'reservas' pero en la que en lugar de guardar fecha inicio y fin, guardas un registro por cada día entre esas fechas, guardando el día correspondiente en cada caso.

De ese modo, saber cuántas habitaciones de un tipo determinado hay ocupadas en una fecha concreta es tan sencillo como seleccionar todos los registros para esa fecha y sumar la cantidad que corresponda a los idhabitación apropiados. Además podrías realizar muchas otras funciones si llegara el caso.

Y ahora imagina que esa tabla no existe, y que en realidad es un array que llenas a partir de los datos que ya tienes en las tablas que usas (habitaciones y reservas)... definiendo las consultas apropiadas, ... y tendrás lo que te ha sugerido repetidamente the_web_saint.
  #14 (permalink)  
Antiguo 29/10/2008, 00:49
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

ok deschamps. esa me parece una opción bastante ventajosa. ahora bien. tengo un problema. no sé sacar los días de un intervalo de fechas. es decir, supongamos que el cliente reserva desde el 10-10-2008 hasta el 15-10-2008 una habitación individual.

tendríamos que en la tabla reservas aparecerían:

fechaentrada: 10-10-2008
fechasalida: 15-10-2008
habitacionid: 1 (es el idhabitacion que le corresponde en la tabla 'habitaciones' a este tipo de habitaciones)
cantidad: 1

como haría para meter en esa nueva tabla que dices esos cinco dias, es decir, el día 10, el 11, el 12, el 13, el 14 y el 15?

sabiendo esto la opción tuya es la ideal. me ayudas?
  #15 (permalink)  
Antiguo 29/10/2008, 01:47
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

bueno. estoy siguiendo el consejo de Deschamps. claro, el primero de los requisitos es saber el número de días de la reserva para ir introduciendolos en la nueva tabla. supongamos una reserva hecha entre el 15/10/2008 y el 17/10/2008. las noches de reservas son dos: la del 15 y la del 16. el 17 sale de la habitación. por lo tanto en la nueva tabla deberán aparecer las fechas de 15/10/2008 y 16/10/2008. Lo primero como digo, calcular el número de noches de reserva. lo he obtenido así:

Código PHP:
$startDate $fechaentrada;
$endDate $fechasalida;
list(
$year$month$day) = explode('-'$startDate);
$startDate mktime(000$month$day$year);
list(
$year$month$day) = explode('-'$endDate);
$endDate mktime(000$month$day$year);
$totalDays = ($endDate $startDate)/(60 60 24) ;
echo 
"Las noches de reserva son: "$totalDays
Ahora ya tengo ese dato: 2 noches. lo siguiente es decirle al sistema que meta esas dos noches en la nueva tabla (es decir, los días 15 y 16) pero ¿cómo hago esto? a la fecha de entrada habría que sumarle 0 y 1 para que me de 15 y 16. pero como automatizo esto para que si la diferencia es por ejemplo de 4 días, me vaya metiendo las fechas adecuadas?
  #16 (permalink)  
Antiguo 29/10/2008, 05:15
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

alguna ayuda?
  #17 (permalink)  
Antiguo 29/10/2008, 09:07
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

nada...me voy a volver loca
  #18 (permalink)  
Antiguo 29/10/2008, 09:14
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 6 meses
Puntos: 43
Respuesta: validar según el número de registros que haya

Porque el código de arriba(el tuyo, donde sacas las fechas), no lo mejoras para guardar en un arreglo las fechas en el mismo formato aaaa/mm/dd para guardarla en la tabla, de esta forma puedes trabajarla como un campo fecha normal.
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #19 (permalink)  
Antiguo 29/10/2008, 13:05
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años
Puntos: 1
Respuesta: validar según el número de registros que haya

desgraciadamente amigo/a the_web_saint, después de un par de horas con tu sugerencia, he de reconocer que no creo ser capaz de saber hacer eso que me dices....o estoy muy bloqueada o me superan esos conocimientos....
  #20 (permalink)  
Antiguo 29/10/2008, 14:22
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 6 meses
Puntos: 43
Respuesta: validar según el número de registros que haya

Revisaste tus MP`s??
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
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 13:02.