最重要的是!这个问题的焦点是末尾的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
答案 0 :(得分:-1)
首先:您有关课程日期和日期的信息是多余的(classes
和bookings
表中存在相同的信息)。从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"