这里的另一种方式,我发现(通过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