最大我有以下3代表作爲汽車的預訂系統的一部分:Mysql的選擇具有閾
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 ..這看起來似乎並不理想。
任何好的解決方案?
謝謝
我無法理解您的問題的性質,您是否一次只能爲汽車提供一次送貨預訂?那麼爲什麼你沒有開始和結束預訂(所以有人在尋找一輛跨越這些日期的汽車可以被忽略。)AND(bookingStart <'END_DATE_STRING'或bookingEnd>'START_DATE_STRING')')? – scragar