我有三張表,tblMembers,tblBooks和tblReviews。這個想法是一個書評網站。這個INNER JOIN SQL查詢有什麼問題?
目前只有在書面評論中才會顯示書名,但是我希望書名隨時隨地顯示;要麼是評論列表,要麼是文本,「這個標題還沒有被評論。」
這個SQL查詢有什麼問題?
$sql = "
SELECT *
FROM tblBooks
INNER JOIN tblReviews
ON tblBooks.bookID = tblReviews.bookID
INNER JOIN tblMembers
ON tblReviews.userID = tblMembers.userID
WHERE tblReviews.bookID = :bookID";
$query = $odb->prepare($sql);
$query->execute(array(":bookID" => $bookID));
$results = $query->fetchAll();
echo "<h1>".$results[0]['longTitle']."</h1>";
if($results !== FALSE && $query->rowCount()>0) {
foreach($results as $result) {
echo "Reviewed by: " . $result['firstName'] . " " . $result['lastName'];
echo "<br />";
echo "Rating: " . $result['rating']."/100";
echo "<br />";
echo "Date: " . $result['reviewDate'] . " " . $result['reviewTime'];
echo "<br />";
echo "Review:";
echo "<br />";
echo $result['reviewText'];
echo "<hr />";
}
} else { // the book has not been reviewed yet
echo "There are no reviews for this title yet";
}
如上所述,線echo "<h1>".$results[0]['longTitle']."</h1>";
時,纔會執行,如果書有評論,我想在本書的詳細檢查,如果它有評論或不前。我怎樣才能做到這一點?
另外還有一點需要注意的是,我該如何檢查哪些書還沒有被評論過,並在結果中填入下拉列表? - 這已經回答了:d
我怎樣才能既:
填充兩個單獨的下拉列表,一個是有評論的書籍和一個用於尚未審查書(這個我能做到因爲我有上述問題的SQL)。
OR
填充單一的下拉列表中,但把書有在頂部,通過字符的字符串分隔的評論,讓我們說「----------這些書一直沒被審查過,但------------「後面還有尚未審查過的書籍。這可能嗎?
你不能。你正在做內部連接,這意味着如果匹配記錄存在於所有連接的表中,你就會得到結果。如果沒有評論,你沒有記錄,因此沒有標題。你至少需要做兩個查詢,或者切換到使用LEFT連接。 – 2013-02-25 18:25:54
如何使用LEFT JOINS,請提供一個示例。 – Mike 2013-02-25 18:26:52
用戶左連接或右連接 - 內連接不起作用 – Vineet1982 2013-02-25 18:27:02