我正在创建一个小型“时段”预订应用程序。
但是我在显示已预订特定时间段的用户时遇到了一些问题。
这个想法是,有一个名为Reserve的链接,当没有预订时,会出现一条文字:预订者:[用户发送电子邮件]
方式是显示我的时间链接是这样的:
$sql = "SELECT * FROM bookings WHERE room_id= '".$room_id."' AND eventDate='".$dateToCompare."'AND timeslot = $time;";
$result = $db->mysqli->query ( $sql );
if (mysqli_num_rows ( $result ) == 0) {
echo "<a href='" . $_SERVER ['PHP_SELF'] . "?id=" . $room_id . "?month=" . $month . "&day=" . $day . "&year=" . $year . "&t={$time}&v=true&f=true&reserved=true'><h3 style='color: rgb(255,0,0);'>Reserve</h3></a>";
} else {
echo $user->getEmail();
while ( $row = mysqli_fetch_array ( $result ) ) {
echo "<br />";
}
}
如您所见,如果有任何预订,我会回复function $user->getEmail();
。
我试图这样做是我的功能。
public function getEmail() {
$str = "SELECT bookings.*, users.email AS booking_email FROM bookings, users WHERE bookings.user_id = users.id";
$result = $this->db->mysqli->query ($str);
$string = "";
while ( $row = $result->fetch_assoc () ) {
$string .= $row ['booking_email'];
}
return $string;
}
但正如你可以想象的那样,回应我数据库中的每一封电子邮件。
我想我的SQL查询需要更多内容吗?
您可以在此处查看我的外键关系:
我希望你们中的一些人能指出我正确的方向。请告诉我是否需要提供更多代码。
编辑:
这就是我创建预订的方式:
if (isset ( $_GET ['reserved'] )) {
$sqlreserve = "INSERT INTO bookings (user_id, room_id, eventDate, timeslot) VALUES ('" . $user_id . "','" . $room_id . "','" . $dateToCompare . "','" . intval ( $_GET ['t'] ) . "');";
$resultreserve = $db->mysqli->query ( $sqlreserve );
echo $resultreserve;
}
答案 0 :(得分:1)
请明确定义您的联接,而不是使用隐式联接。它使SQL更容易理解并避免错误。
如果您调整了第一个SQL语句,则可以获取具有房间可用性的用户电子邮件地址(如果可用)。
SELECT
`bookings`.*,
`users`.`email` AS booking_email
FROM `bookings`
LEFT OUTER JOIN `users`
ON (`bookings`.`user_id` = `users`.`id`)
WHERE
`room_id` = '".$room_id."'
AND `eventDate` = '".$dateToCompare."'
AND `timeslot` = '".$time."'