Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过预订获得可用日期?_Php_Mysql - Fatal编程技术网

Php 如何通过预订获得可用日期?

Php 如何通过预订获得可用日期?,php,mysql,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(

我正在尝试建立一个系统,允许用户预订物品,比如笔记本电脑

我的桌子看起来像这样:

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

如果您的预订表单提示您为预订输入$start和$end date/次,此查询将告诉您在这两个日期指定的时间段内哪些笔记本电脑可用:

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检查将搜索限制在笔记本电脑上。

您可能需要在表
“预订”中添加
项目
,否则您将无法看到哪个项目是预订的。是的,显然是这样,但这不是问题。这不是我想要的。。尽管这是一种不错的选择。。我想要的是:用户告诉我们他想要一台笔记本电脑,然后他会得到一个可用时间的列表,在那里他可以预订一台笔记本电脑。数据库不能凭空创建数据。要么你从一个周期列表开始,并将其标记为正在使用(仅显示可用的周期),要么你从一个正在使用的周期列表开始,并删除不起作用的周期。有点担心,似乎我必须处理它!