作为汽车预订系统的一部分,我有以下 3 个表格:
CREATE TABLE `b_booking` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`b_car_id` VARCHAR(15) NOT NULL,
`uc_user_id` INT(11) NOT NULL,
`booking_date` DATE NOT NULL,
`delivery_date` DATE NOT NULL,
`delivery_location` INT(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `FK_b_booking_b_car` (`b_car_id`),
INDEX `FK_b_booking_uc_users` (`uc_user_id`),
INDEX `FK_b_booking_b_location` (`delivery_location`),
CONSTRAINT `FK_b_booking_b_location` FOREIGN KEY (`delivery_location`) REFERENCES `b_location` (`id`),
CONSTRAINT `FK_b_booking_b_car` FOREIGN KEY (`b_car_id`) REFERENCES `b_car` (`id`),
CONSTRAINT `FK_b_booking_uc_users` FOREIGN KEY (`uc_user_id`) REFERENCES `uc_users` (`id`)
CREATE TABLE `b_car` (
`id` VARCHAR(15) NOT NULL,
`b_carmodel_id` INT(10) NOT NULL,
`day_cost` INT(10) NOT NULL,
`location` INT(10) NOT NULL,
`model_year` SMALLINT(4) NOT NULL,
PRIMARY KEY (`id`),
INDEX `FK_b_car_b_carmodel` (`b_carmodel_id`),
INDEX `FK_b_car_b_location` (`location`),
CONSTRAINT `FK_b_car_b_location` FOREIGN KEY (`location`) REFERENCES `b_location` (`id`),
CONSTRAINT `FK_b_car_b_carmodel` FOREIGN KEY (`b_carmodel_id`) REFERENCES `b_carmodel` (`id`)
CREATE TABLE `b_location` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`adress` VARCHAR(100) NOT NULL,
`b_postal_zip` SMALLINT(4) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `FK_b_location_b_postal` (`b_postal_zip`),
CONSTRAINT `FK_b_location_b_postal` FOREIGN KEY (`b_postal_zip`) REFERENCES `b_postal` (`zip`)
给定的汽车 (b_car) 将有一个 int 表示可以取车或交付汽车的 av 位置。但是,由于客户可以在一个位置取车并在另一个位置交付,因此该位置将发生变化。当客户注册预订 (b_booking) 时,他/她还注册了汽车将在什么位置交付 (delivery_location)。
但是,在我看来不应该那么难的事情上,我遇到了很多问题:假设一辆车在月初位于位置 1。然后,客户 X 注册了 15-20 的预订。并在地点 2 登记交货。然后客户 Y 希望预订同一辆车。所以我需要一个考虑到日期和位置的查询。
SELECT c.id, c.location, b.delivery_location, MAX(b.delivery_date) FROM b_car c
LEFT JOIN b_booking b ON b.b_car_id = c.id
WHERE b.delivery_date < '2012-11-28' OR b.delivery_date IS NULL
GROUP BY c.id;
我试过类似的东西。我将选择所有没有左连接预订的汽车,它还将选择最后一次预订(与给定日期相关的最后一次预订)。当然,问题在于 where 条件还排除了任何日期高于提供日期的预订。此外,使用此解决方案,我不得不同时获取位置(来自 b_car)和交付位置(来自 b_booking),并且可能使用 php 或其他东西在 delivery_location 上评估 null .. 这似乎不是最佳的。
有什么好的解决办法吗?
谢谢