如何在一个表中使用价格数据进行存储在另一个表中的计算?

时间:2012-10-02 02:36:25

标签: php html mysql

我仍然倾向于使用PHP / MySQL,但由于StackOverflow上的实体已经学到了很多东西。我正在尝试使用两个表来设置一种房间预订系统:


SETUP:

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

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

客户信息表:具有特定客户的名称,地址,房间使用日期等数据。

示例:

Alpha-room价格表:   太阳= 100美元;周一= 200美元;星期二= 300美元等等。

Bravo-room价格表:   太阳= 100美元;周一= 200美元;星期二= 300美元等等。

客户数据表:   客户名称;日期余地使用;地址; day_subtotal; grand_total。

问题:

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

  1. 查看客户数据表中的房间使用日期
  2. 在特定房间定价表中查找该日期的相关费用,
  3. 记录客户数据表的日期小计中的单位成本
  4. 并在客户数据的总计行中总计一个总计 桌子(假设房间可能超过一天使用 顾客)。
  5. 我知道这与加入有关,但我发现很难掌握这个概念,如果有人可以证明使用这个例子,我想我会更好地理解如何处理这种交易。 / p>

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

1 个答案:

答案 0 :(得分:5)

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

rooms应包含以下字段:idnamedescription

prices应包含以下字段:idpriceroom_idday

clients应包含以下字段:id以及您要在用户上存储的任何内容,例如姓名,电话号码或其他内容。

bookings应包含以下字段:idclient_idroom_idstarted_atended_at。最好started_atended_at字段为int,填充PHP的time()方法。

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

将表格分开,您将能够正确查询数据库。所以回答你的问题...

  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. 计算客户端在房间中的时间长度,(ends_at - started_at)/ 86400,(86400是一天中的秒数),它将给出客户端的天数在房间里。

    3. 现在你知道哪些日子以及客户在房间里的时间,你可以动态创建一个sql调用来选择你需要的星期几,请记住Date('N', $timeStamp)会给你给定时间戳的星期几。

    4. 然后只是做一个简单的添加。

  5. 我已经在这里给了你基础知识,你可以从答案一中修改查询,以告诉你房间是否可以在用户要求的时间范围内预订。

    我希望这涵盖了你所询问的一切......