使用php和mysqli

时间:2016-05-01 19:44:41

标签: php sql mysqli while-loop

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

首先,'Fredrik'是在这个例子中登录的人。

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

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

2 个答案:

答案 0 :(得分:-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转义!)

答案 1 :(得分:-1)

你不需要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"