我的PHPMyAdmin中有一个数据库,它包含2个表:
tennisCourts
courtID
courtName
bookingFee
tenniscourts_Availability
courtID
court_dateBooked
我正在使用PEAR存储库编写PHP程序,我正在努力创建允许我执行的代码:
仅当用户选择的日期尚未被其他用户使用时,请选择用户选择的法院预约日期并显示来自tennisCourts表的所有字段。我在tenniscourts_Availability表中输入了虚拟数据。
SELECT and DISPLAY all fields
from the tennisCourts table (courtID, courtName, bookingFee)
WHERE court_dateBooked = $CHOSEN_BOOKING_DATE
*($_GET is used here to retrieve the booking date enetered by
the user in a seperate html document.)
这是我目前的代码: -
$db_table_tennisCourts = "tennisCourts";
$court_ID = "courtID";
$court_Name = "courtName";
$booking_Fee = "bookingFee";
$db_table_tenniscourts_Availability = "tenniscourts_Availability";
$court_ID = "courtID";
$court_dateBooked = "court_dateBooked";
$CHOSEN_BOOKING_DATE = $_GET['user_dateField']; //GET's input data from user form in my other html document.
$database->setFetchMode(MDB2_FETCHMODE_ORDERED);
$myQuery = "SELECT $court_ID , $court_dateBooked FROM $db_table_ WHERE $CHOSEN_BOOKING_DATE != $court_dateBooked";
$queryResult =& $db->query($myQuery);
if (PEAR::isError($queryResult)) {
die($queryResult->getMessage());
}
while ($Col =& $queryResult->fetchRow()) {
echo $queryResult[0].' '; //shows courtID
$queryResult[1];
list($y,$m,$d)=explode('-',$queryResult[1]);
echo $d.'/'.$m.'/'.$y.'/<br/>';
}
?>
我还是PHP和SQL的新手,请原谅我,如果我还没弄清楚的话。我一直在网上研究,各种消息来源说使用SQL UNION OR JOIN?有人可以请教我如何在我的场景中使用它们吗?我非常感谢任何帮助。感谢您查看我的问题。
答案 0 :(得分:3)
将您的查询更改为:
$myQuery = "
SELECT DISTINCT
c.courtID,
c.courtName,
c.bookingFee
FROM
tennisCourts c
INNER JOIN tenniscourts_Availability a ON c.courtID = a.courtID
WHERE
a.court_dateBooked = '". mysql_real_escape_string($CHOSEN_BOOKING_DATE) ."'
";
这将检索在指定日期预订的所有法院的法院信息。如果您想获得在指定日期未预订的所有法院的法院信息,请使用此查询:
$myQuery = "
SELECT
courtID,
courtName,
bookingFee
FROM
tennisCourts
WHERE
courtID NOT IN (SELECT courtID FROM tenniscourts_Availability WHERE court_dateBooked = '". mysql_real_escape_string($CHOSEN_BOOKING_DATE) ."'
";
有关您的代码的一些注意事项:
$db_table_
)的PHP变量似乎未定义。$_GET
的输入容易受到SQL injection。答案 1 :(得分:0)
假设事情仅在预订时插入到可用性表中,我认为这就是你想要的。
SELECT c.courtID, c.courtName, c.bookingFee, a.court_dateBooked FROM tennisCourts c
LEFT JOIN tenniscourt_Avaliability a ON c.courtID=a.courtID
WHERE b.court_dateBooked=$CHOSEN_BOOKING_DATE
然后,您可以通过检查court_dateBooked是否为空来过滤掉已经预订的那些。
有关左连接的更多信息,请参阅以下内容:What is the difference between "INNER JOIN" and "OUTER JOIN"?