1

我仍然在学习 PHP/MySQL,但由于 StackOverflow 上的代码,我学到了很多东西。我正在尝试使用两张桌子设置一种房间预订系统:


设置:

房间价格表:有,客户可能想要租用的类型房间的价格以及他们希望使用它的日期(星期几)。价格根据一周中的某一天和每间客房而有所不同。

我为每种房型设置了不同的表格,因为每种房型在一周中的每一天都有不同的定价。因此,有一个 Alpha 房间表、Bravo 房间等。在 Alpha 表中是一周中各天的标题,价格预先输入到行中。

客户信息表:包含特定客户的姓名、地址、房间使用日期等数据。

例子:

Alpha 房间价格表: Sun = $100;周一 = 200 美元;周二 = 300 美元,以此类推。

Bravo 房间价格表: Sun = $100;周一 = 200 美元;周二 = 300 美元,以此类推。

客户端数据表: ClientName;房间使用日期;地址; day_subtotal; 累计。

问题:

我正在尝试找到以下 PHP 代码:

  1. 查看客户数据表中的房间使用日期,
  2. 在特定房间定价表中查找该日期的相关费用,
  3. 在客户数据表的天小计中记录该单位成本
  4. 并在客户数据表的总计行中求和总计(假设房间可能被客户使用超过一天)。

我知道与 join 有关,但我发现很难掌握这个概念,如果有人可以使用这个例子进行演示,我想我会对如何处理这种事务有更好的理解。

提前感谢大家的建议或替代方法。

4

1 回答 1

5

首先,你应该稍微分开你的数据库,你应该有四个表。rooms, prices,clientsbookings. 设置有点像这样...

rooms应具有以下字段idnamedescription

prices应具有以下字段:idprice和。room_idday

clients应该有以下字段:id以及您想要存储在用户身上的任何其他内容,例如名字和姓氏、电话号码或其他任何内容。

bookings应具有以下字段:idclient_idroom_id和。最好and字段将是一个 int,填充 PHP 的方法。started_atended_atstarted_atended_attime()

您可以在表格中添加您想要/需要的任何额外字段。

像这样分离表后,您将能够正确查询数据库。所以回答你的问题...

  1. 查看房间的使用日期...您现在可以通过执行以下操作来查询房间是否在特定日期使用...

    <?php
    $selectedDate= mktime(); // Create a UNIX timestamp based on the day the user selected.
    $query = "SELECT r.name, r.description
              FROM rooms r, bookings b
              WHERE b.room_id = r.id
              AND b.started_at < $selectedDate
              OR b.ended_at > $selectedDate";
    $result = $pdo->query($query);
    ?>
    
  2. 查找该日期的费用

    <?php
    $selectedDate = mktime() // Create a UNIX timestamp based on the day the user selected
    $dayOfWeek = Date('N', $selectedDate); // This will give the numerical day of the week.
    $query = "SELECT price
              FROM prices
              WHERE room_id = $roomId
              AND day = $dayOfWeek";
    $result = $pdo->query($query);
    ?>
    
  3. 在客户表中记录该单位成本

    由于已经在另一个表中拥有信息,这样做只是愚蠢的。永远不要在数据库中重新创建相同的信息。如果是,则说明您构建的数据库不正确。

  4. 客户表中的总计

    再一次,愚蠢的......不要重新创建数据......

    1. 不过,要找到该信息,您首先需要在预订表上进行查询,并查看用户将占用房间的开始和结束日期。

    2. 计算客户在房间里的时间,(ended_at - started_at) / 86400,(86400 是一天中的秒数),这将给出客户在房间里的天数。

    3. 既然您知道客户将在房间里停留的日期和时间,您可以动态创建一个 sql 调用来选择您需要的星期几,记住Date('N', $timeStamp)会给您一个给定时间戳的星期几的数字。

    4. 然后只需进行简单的加法即可。

我在这里为您提供了基础知识,您可以修改答案一中的查询,以显示在用户要求的时间范围内是否可以预订房间。

我希望这涵盖了您所询问的所有内容...

于 2012-10-02T03:34:32.807 回答