【问题标题】:Match a bigger table with a smaller one with php and mysqli使用 php 和 mysqli 将更大的表与较小的表匹配
【发布时间】:2016-08-26 13:13:47
【问题描述】:

最重要的是!这个问题的重点是最后的while循环和后面的“结果表”。

首先,“Fredrik”这个人是这个例子中登录的人。

我在 sql 中有两个表,“classes”和“bookings”。 "classes" 显示所有可用的课程,当有人预订其中一个课程时,该特定课程的 id (id_classes) 并且该人的姓名最终在 "bookings" 表中显示为一行。

classes
id_class     date                    day            
1           2016-03-10 15:00:00     monday
2           2016-03-10 16:00:00     monday
3           2016-03-10 17:00:00     monday
4           2016-03-11 15:00:00     tuesday
5           2016-03-11 16:00:00     tuesday
6           2016-03-11 17:00:00     tuesday
7           2016-03-11 18:00:00     tuesday




bookings
    id      id_class    date                    day         name    
    1       2           2016-03-10 16:00:00     monday      Fredrik
    2       5           2016-03-11 16:00:00     tuesday     Richard
    3       7           2016-03-11 18:00:00     tuesday     Sara
    4       4           2016-03-11 15:00:00     tuesday     Fredrik

然后我想要一个遍历整个“课程”表的 php 代码,并显示登录的人 (Fredrik) 他预订了哪些课程以及他没有预订哪些课程。我从一个简单的 while 循环和一些 if 语句开始。我需要帮助来完成这段代码。此外,这两个表都可能非常大,因此非常欢迎提供效率建议。

    <?php
        $result = $con->query("select * from classes");

        while(){

        if(){
            echo "Booked";

        }elseif(){
            echo "Not booked";

        }       

        }
<?

所以我一直是一个看起来像这样的结果表

result table
id_class     date                    day        status           
1           2016-03-10 15:00:00     monday      not booked
2           2016-03-10 16:00:00     monday      booked
3           2016-03-10 17:00:00     monday      not booked
4           2016-03-11 15:00:00     tuesday     booked
5           2016-03-11 16:00:00     tuesday     booked
6           2016-03-11 17:00:00     tuesday     not booked
7           2016-03-11 18:00:00     tuesday     booked

【问题讨论】:

    标签: php sql mysqli while-loop


    【解决方案1】:

    首先:您关于上课日期和日期的信息是多余的(classesbookings 表中存在相同的信息)。从bookings 表中删除冗余信息。

    然后,例如使用这个 SQL 查询(未经测试):

    SELECT `c`.`date`, `c`.`day` FROM `bookings` AS `b` INNER JOIN `classes` AS `c` ON `b`.`id_class` = `c`.`id` WHERE `b`.`name` = '[loggedInUser]';
    

    (将[loggedInUser]替换为您的登录用户名,最好使用PDO准备好的语句,或者至少使用mysqli!)

    【讨论】:

    • 我已经通过添加结果表来编辑问题,这是问题的主要目标。 IE。一个表格,它遍历“classes”表格中的所有可用时间,并告诉用户是否预订了它。
    【解决方案2】:

    你不需要 php 来解决这个问题。在这种情况下,您需要左连接。

    SELECT a.id_class, a.date, a.day, b.booking_id, b.name FROM classes a LEFT JOIN bookings b ON a.idclass=b.id_class WHERE b.name="Frederick"
    

    【讨论】:

    • 我已经通过添加结果表来编辑问题,这是问题的主要目标。 IE。一个表格,它遍历“classes”表格中的所有可用时间,并告诉用户是否预订了它。
    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 2020-02-28
    • 1970-01-01
    • 2021-12-21
    • 2021-03-09
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多