0

tblMembers、tblBooks、tblReviewsの3つのテーブルがあります。アイデアは書評のウェブサイトです。

現在、本のタイトルはレビューが書かれている場合にのみ表示されますが、本のタイトルは常に一緒に表示されるようにしたいと思います。レビューのリスト、または「このタイトルはまだレビューされていません」というテキストのいずれかです。

この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

どうすればいいですか:

2つの別々のドロップダウンリストにデータを入力します。1つはレビューのある本用で、もう1つはまだレビューされていない本用です(これは上記の質問のSQLがあるので実行できます)。

また

単一のドロップダウンリストにデータを入力しますが、上部にレビューのある本を文字列で区切って配置します。たとえば、「----------これらの本はまだレビューされていません------- ---」の後に、まだレビューされていない本が続きます。これは可能ですか?

4

1 に答える 1

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

レビューや関連会員の有無にかかわらず、すべての書籍を返却します。

レビューがある場合はそれを返し、レビューにメンバーがいる場合はそれも返します。そうしないと、tblMembersまたはtblReviewsに関連するフィールドにNULL値が返されます。

于 2013-02-25T18:39:17.883 に答える