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

标签 php html mysql

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


设置:

房间价格表:有,客户可能想要租用的房间类型的价格以及他们希望使用它的日期(星期几)。价格因星期几和每个房间而异。

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

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

示例:

Alpha 房间价格表: 太阳 = 100 美元;周一 = 200 美元;周二 = $300 等等。

Bravo 客房价格表: 太阳 = 100 美元;周一 = 200 美元;周二 = $300 等等。

客户端数据表: 客户名称;房间使用日期;地址; day_subtotal;总计。

问题:

我正在尝试寻找 PHP 代码来:

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

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

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

最佳答案

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

rooms应具有以下字段:id , namedescription .

prices应具有以下字段:id , price , room_idday .

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

bookings应具有以下字段:id , client_id , room_id , started_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. 计算客户在房间里的时间,(ended_at - started_at)/86400,(86400 是一天中的秒数)这将给出客户在房间里的天数在房间里。

    3. 现在您知道客户将在哪几天以及多长时间在房间里,您可以动态创建一个 sql 调用来选择您需要的一周中的几天,记住 Date('N', $timeStamp)将为您提供给定时间戳的星期几。

    4. 那么就是做简单的加法了。

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

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

关于php - 如何使用一个表中的价格数据进行存储在另一个表中的计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683825/

相关文章:

php - 如何在php中检查文件是否为视频类型?

html - 选择框 HIT 区域与视觉位置不对齐

java - JTidy 无法处理脚本元素内的 HTML 标签

html - 给div添加css背景

php - PHP Mysql CASE每日销售报告

sql - 向 gerrund 表添加索引

php - 如果 div 类为空(使用 laravel foreachloop)

php - 在 Linux 上找不到 xdebug.so

php - 仅打印一次数组中的值

php - 输入 PHP/mysql 表值时需要快速帮助