这个INNER JOIN SQL查询出了什么问题?

时间:2013-02-25 18:23:14

标签: php mysql pdo

我有三个表,tblMembers,tblBooks和tblReviews。这个想法是一个书评网站。

目前只有在为其撰写评论时才会显示图书标题,但是我希望图书标题始终与之一起显示;无论是评论列表还是文本,“此标题尚未经过审核。”

此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

填充单个下拉列表,但将带有评论的书放在顶部,用一串字符分隔,让我们说“----------这些书还没有被审查过---- ------“其次是尚未经过审查的书籍。这可能吗?

1 个答案:

答案 0 :(得分:1)

SELECT *
FROM tblBooks
LEFT JOIN tblReviews
ON tblBooks.bookID = tblReviews.bookID
LEFT JOIN tblMembers
ON tblReviews.userID = tblMembers.userID
WHERE tblReviews.bookID = :bookID

无论是否有评论或与其有关联的成员,都会返回所有图书。

如果有评论返回,如果评论也有成员。否则NULL值将返回与tblMembers或tblReviews相关的字段。