我正在寻找帮助,因为我正在尝试创建一个测试预订系统,但每个人需要在特定的时间预订到特定的机器(笔记本电脑)。请参阅以下数据库:
php - 检查预订系统中的空位-LMLPHP
为糟糕的形象道歉,但希望你能明白。我有数据库可以显示我预订的记录,但我想知道还剩下什么。
我目前有10台机器,每台都有三个时间段,这样您可以更容易地看到:

****************************************************************
* Machine/Laptop *   Time Slot   *      Name      *     Test   *
****************************************************************
*                * 09:30 - 11:00 * John Adams     * English    *
*    Laptop 1    * 11:00 - 13:00 * Book Slot      * Free       *
*                * 13:00 - 14:00 * Raj Patel      * English    *
****************************************************************
*                * 09:00 - 12:00 * Joe King       * English    *
*    Laptop 2    * 11:00 - 13:00 * Andrew Lil     * Maths      *
*                * 13:00 - 12:00 * Book Slot      * Free       *
****************************************************************

现在我不知道如何使一个数据库查询工作,但例如,这里有一个非常肮脏的方法来做到这一点,即每次加载页面时检查数据库30次:
$sql = $dbconn->prepare('SELECT COUNT(*) AS `total`
                          FROM event_booking
                          INNER JOIN event_machine
                          ON event_booking.machine_id=event_machine.id
                          INNER JOIN event_machine_time
                          ON event_booking.machine_time_id=event_machine_time.id
                          WHERE information_id = '.$_GET["id"].' AND event_machine.id=1 AND event_machine_time.id=2');
    $sql->execute();
    $result = $sql->fetchObject();
    if ($result->total > 0) { echo 'Slot Booked'; } else { echo '<a href="booking.php">Book Slot</a>'; }

每次调用时,我都必须更改event_machine.id=? AND event_machine_time.id=?来调用特定的插槽。
我肯定我错了,所以任何帮助都是很好的:)
编辑:
如果这对我有帮助的话
php - 检查预订系统中的空位-LMLPHP
如你所见,紫色的按钮是活动的插槽,而较暗的是预定的。作为一个演示,我只能装下10台笔记本中的5台,但你明白了。
这是我用来调用所有活动预订的数据库查询。这显示了活动中从event_information开始的所有预订,然后我使用fetchAll进入一个表。但我不知道是否可以用这个查询将预订ID转到时间段?
$Event_list = $dbconn->prepare('SELECT
                                  event_booking.id,
                                  event_booking.live,
                                  event_booking.confirmation_email,
                                  event_candidate.firstname,
                                  event_candidate.surname,
                                  event_candidate.email,
                                  event_information.type,
                                  event_machine.id AS machine_get_id,
                                  event_machine.name,
                                  event_machine_time.id AS machine_time_get_id,
                                  event_machine_time.start_time AS machine_start_time,
                                  event_machine_time.end_time AS machine_end_time
                                  FROM event_booking
                                  INNER JOIN event_candidate
                                  ON event_booking.candidate_id=event_candidate.id
                                  INNER JOIN event_information
                                  ON event_booking.information_id=event_information.id
                                  INNER JOIN event_machine
                                  ON event_booking.machine_id=event_machine.id
                                  INNER JOIN event_machine_time
                                  ON event_booking.machine_time_id=event_machine_time.id
                                  WHERE information_id = ?');
    $Event_list->execute(array($_GET["id"]));

另一个编辑:
另一个选择是废弃event_machine并将名为machine_name的列添加到event_machine_time中,然后使用以下命令:
$Event_Times = $dbconn->query('SELECT *
                                   FROM event_machine_time
                                   LEFT JOIN event_booking
                                   ON event_machine_time.id=event_booking.machine_time_id
                                   ');

在表中使用:
<td>
        <?php foreach ($Event_Times->fetchAll() as $Event_Times_Row) { ?>
            <?php if($Event_Times_Row["machine_name"] == "Laptop 1") { ?>
            <a class="button<?php if($Event_Times_Row["information_id"] == $_GET["id"]) { echo " button-disabled"; } ?>" href="#"><?php echo date("G:i", strtotime($Event_Times_Row["start_time"])); ?></a>
        <?php } } ?>
</td>

不过,我需要调用10次,我认为fetchAll不允许这样做,我需要重复这个db查询10次才能使其工作。

最佳答案

你的方法需要修正:
event_machine_time表必须与event_machine表相关。所以event_machine_time表必须有一个字段名event_machine_id
之后,您不需要在event_bookingevent_machine表之间建立直接关系,因为在上一步中可以从relation other relation中发现它。
最好从start_date表中删除end_date&event_information字段,因为它们是相等的。必须插入一个新的event_date字段来表示这两个值。
必须从start_time表中删除end_timeevent_information字段,因为它们可以从event_machine_time表中与主表相关的位置发现,以保持数据集成。
最好将event_information表包含在主booking_event表中,因为这些表之间存在1:1的关系。
在你做了这些改变之后,你想做的一切都会变得非常简单。

07-25 23:48
查看更多