這裏的另一種方式,我發現(通過Mysql filling in missing dates)。創建3個表格:車輛,固定預訂和當年的所有可用日期。
reservations: id, booked, vehicle_ref
insert into reservations values (0, '2011-01-12',1);
insert into reservations values (0, '2011-01-13',1);
insert into reservations values (0, '2011-01-14',1);
insert into reservations values (0, '2011-01-20',1);
insert into reservations values (0, '2011-01-21',1);
reservations_free: free (just a list of all dates this year...)
insert into reservations_free values
('2011-01-10'),
('2011-01-11'),
('2011-01-12'),
('2011-01-13'),
('2011-01-14'),
('2011-01-15'),
('2011-01-16'),
('2011-01-17'),
('2011-01-18'),
('2011-01-19'),
('2011-01-20'),
('2011-01-21'),
('2011-01-22'),
('2011-01-23');
檢索未1月1日和2月1日之間預訂車輛#1的所有日期:
SELECT free
FROM reservations_free
LEFT OUTER JOIN reservations ON (reservations.booked = reservations_free.free AND reservations.vehicle_ref =1)
WHERE booked IS NULL AND
reservations_free.free
BETWEEN '2011-01-01'
AND '2011-02-01'
ORDER BY free
LIMIT 0 , 30;
獲取你的列表:
2011-01-10
2011-01-11
2011-01-15
2011-01-16
2011-01-17
2011-01-18
2011-01-19
2011-01-22
2011-01-23
當然你必須爲了每年維護reservations_free表,這個sql語句可能需要進一步優化,因爲我只是從原始的表單中弄出來的。
使用mysql日期字段意味着你可以瀏覽你的數據,它仍然會對你有一定的意義。
添加和刪除一天將是一個辛苦。
它沒有按照要求提供「在15日和19日之間免費」,但如果不是在一個稍微複雜的sql語句中,應該可以在PHP中實現。
選中此項:http:// stackoverflow。com/questions/4165655/mysql-select-rows-where-date-not-between-date這看起來像一個相同的問題 – 2011-05-26 12:41:09
你將不得不查詢汽車表,看carID是否在預訂表中,然後設置你的日期,希望這是有道理的,因爲它使我困惑寫作! – Liam 2011-05-26 12:44:13