En realidad no es una consulta tan dificil de pensar, pero es larga de escribir cuando se trata de eventos que ocurren dentro de un rango.
Lo que suelo aconsejar es NUNCA tratar de resolver una consulta de ese tipo de condiciones de un solo saque, solo conseguirás hacer consultas complicadas. Es mejor hacerlo parte a parte y luego integrarlas.
Empecemos así: ¿Qué condiciones debe cumplir un vehiculo para estar disponible en un rago de tiempo determinado?
- No debe estar alquilado en el mismo período.
- No debe haber iniciado su alquiler antes del período y terminar después (tiempos solapados).
- No debe haber iniciado y terminado su alquiler entremedio de las fechas que se buscan (tiempo solapado).
- No debe iniciar o terminar entremedio de las fechas buscadas (tiempos cruzados).
¿Cuatro condiciones? No, realmente, sólo tres grupos:
Código SQL:
Ver originalSELECT `Fk_matricula_auto`
FROM `clienteauto`
WHERE
fecha_inicio_alquiler NOT BETWEEN '2006-06-05' AND '2006-06-07'
OR fecha_final_alquiler NOT BETWEEN '2006-06-05' AND '2006-06-07'
OR NOT (fecha_inicio_alquiler < '2006-06-05' AND fecha_final_alquiler > '2006-06-07')