我正在尝试构建一个让用户预订项目的系统,让我们说一台笔记本电脑..
我的表格如下:
Table 'items'
id int(20) PK auto_increment
type int(20) FK(types.id)
name varchar(200)
Table 'types'
id int(20) PK auto_increment
name varchar(200)
Table 'reservations'
id int(20) PK auto_increment
user int(20) FK(users.id)
startDate datetime
endDate datetime
假设我有1种类型(笔记本电脑)和3台笔记本电脑都具有相同的规格,而且用户只想保留一台笔记本电脑。如何才能获得笔记本电脑的所有可用日期?
我不介意如何通过PHP或MySQL实现这一点,我只是打算让用户拥有一个包含给定类型项目的可用日期的列表。
答案 0 :(得分:3)
如果您的预订表单提示预订的$ start和$ end date / times,此查询将告知这两个日期指定的期间内哪些笔记本电脑可用:
SELECT items.id, items.name
FROM items
LEFT JOIN types ON items.type = types.id
LEFT JOIN reservations ON reservations.item_id = items.id
WHERE (((reservations.endDate NOT between $start AND $end) and
(reservations.startDate NOT between $start AND $end)) or
(reservations.id IS NULL)) and
(types.id = $laptop_type_id)
前两个between
子句会找到任何笔记本电脑的开始/结束日期不会随着请求的开始/结束日期而下降 - 例如它们是保留的,但在指定的时间范围内可用。空检查将找到任何未保留的笔记本电脑。 types.id检查将搜索限制为仅限笔记本电脑。