如何预订可用日期?

时间:2011-06-19 16:37:37

标签: php mysql

我正在尝试构建一个让用户预订项目的系统,让我们说一台笔记本电脑..

我的表格如下:

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实现这一点,我只是打算让用户拥有一个包含给定类型项目的可用日期的列表。

1 个答案:

答案 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检查将搜索限制为仅限笔记本电脑。