Bueno al final lo resolví, espero que la solucion que he encontrado le sirva a alguien, por que he pasado dias y dias buscando en internet y no he encontrado nada al respecto de como evitar clones en rangos de fechas... Si alguien tiene una solución mas elegante o sencilla soy todo orejas
.
Tras muchisimos intentos y grandes cantidades de sustancias iluminadoras (vease cantidades industriales de cafe
)
Código:
//EVITAR CLONES EN RANGOS DE FECHAS
$ent = strtotime(date("Y-m-d", strtotime($fechaEntrada)) . " +1 day");
$sal = strtotime(date("Y-m-d", strtotime($fechaSalida)) . " -1 day");
$entrada = date("Y-m-d", $ent);
$salida = date("Y-m-d", $sal);
$chek_fecha = mysql_query("
(SELECT count(fechaEntrada) AS NumFechaEnt FROM `reservas` WHERE fechaEntrada BETWEEN '".$entrada."' AND '".$salida."')
UNION ALL
(SELECT count(fechaSalida) AS NumFechaSal FROM `reservas` WHERE fechaSalida BETWEEN '".$entrada."' AND '".$salida."')
",$conexion);
while($row = mysql_fetch_array($chek_fecha)) {
if ($row["NumFechaEnt"] != 0) {
die('Ya hay una fecha introducida para ese rango de fechas');
}
}
// Continuar con la insercion de datos
Para los que se pregunten por que he añadido un dia de la fecha de entrada y restado otro de la fecha de salida:
Resulta que aunque un cliente salga un dia determinado, otro puede ocupar su habitacion ese mismo dia, por lo que el dia de salida de una fecha, la habitacion se considera libre... Es un caso muy particular, pero bueno :P
Edito: hay un caso en el que esto no funciona... Si se inserta una reserva justo en medio de otra que la contenga totalmente... Es un fallo grave, así que si alguien sabe como resolverlo... A mi me afecta poco ya que es casi imposible que con los rangos de ocupacion maximos y minimos que tengo una reserva termine dentro de otra totalmente... Pero para otros usos si que puede ser un problema.