Je travaille sur un système de location de voiture utilisant Codeigniter où un véhicule peut avoir plusieurs plages de dates indisponibles. J'ai créé un tableau séparé pour les plages de dates non disponibles, maintenant je veux que l'utilisateur entre une plage de dates et sélectionne toutes les voitures qui ne chevauchent pas les plages de dates non disponibles de ces voitures. Voici mon code.MySQL vérifie si la plage de dates chevauche d'autres plages de dates?
$d1 = date('Y-m-d', strtotime($pickup));
$d2 = date('Y-m-d', strtotime($dropoff));
// $this->db->where($d1." NOT BETWEEN date_ranges.start_date AND date_ranges.end_date AND " . $d2.' NOT BETWEEN date_ranges.start_date AND date_ranges.end_date');
$this->db->where("'$d1' NOT BETWEEN date_ranges.start_date AND date_ranges.end_date AND '$d2' NOT BETWEEN date_ranges.start_date AND date_ranges.end_date OR ('$d1' < date_ranges.start_date AND '$d2' > date_ranges.end_date) ");
// $this->db->where(" '$d1' <= date_ranges.end_date AND date_ranges.start_date <= '$d2'");
$query = ->join('date_ranges', 'vehicles.id = date_ranges.vehicle_id', 'left')
->group_by('vehicles.id')
->get('vehicles');
Raw Interrogation
SELECT `vehicles`.`id`, `vehicles`.`year-`, `vehicles`.`model`,
`vehicles`.`nightly_rate`, `vehicles`.`class`,
`vehicle_pictures`.`picture`,
`vehicles`.`people` FROM `vehicles` LEFT JOIN `vehicle_pictures` ON
`vehicles`.`id` = `vehicle_pictures`.`vehicle_id` LEFT JOIN `date_ranges`
ON
`vehicles`.`id` = `date_ranges`.`vehicle_id`
WHERE (`country` LIKE '%%'
ESCAPE
'!' OR `state` LIKE '%%' ESCAPE '!' OR `city` LIKE '%%' ESCAPE '!' OR
`street`
LIKE '%%' ESCAPE '!' OR `zip` LIKE '%%' ESCAPE '!')
AND '2017-05-23'
NOT
BETWEEN `date_ranges`.`start_date` AND date_ranges.end_date AND '2017-
05-24'
NOT
BETWEEN `date_ranges`.`start_date` AND date_ranges.end_date OR ('2017-
05-23' <
`date_ranges`.`start_date` AND '2017-05-24' > date_ranges.end_date) AND
`vehicles`.`people` > '1' GROUP BY `vehicles`.`id`;
double possible de [Vérifier chevauchement des plages de dates dans MySQL] (https://stackoverflow.com/questions/2545947/check-overlap-of-date-ranges-in-mysql) – JazZ