データベースに2つのテーブルがあります(実際にはそれ以上ですが、現在は問題ありません)。
1つのテーブルには、ステータスが「公開」または「ゴミ箱」の本が格納されます。書籍は、その書籍がもう持ち運ばれていないかどうかに基づいて、公開またはゴミ箱のステータスになります。
もう1つのテーブルには、特定のユーザーが特定の本を読んだかどうかに関するデータが格納されます。
ユーザーが読んだ、まだ読んでいない、まだ持っているすべての本のリストを表示したいと思います。両方のテーブルを結合し、ステータスに関係なく、特定のユーザーと既読の日付、または未読の場合はNULLと各本を照合するクエリを作成しました。問題は、ユーザーがまだ読んでいない本を表示したいのに、ユーザーが読んでいない(ゴミ箱の状態になっている)本を表示したくないということです。
現在、私はそれを達成することができませんでした。PHP側のforeachループでは、ゴミ箱のステータスの本が読まれているかどうかを確認し、読まれていない場合はスキップします。これは私が感じるデータベース側では非効率的です。
以下は私が現在持っているスクリプトです。私が達成しようとしていることは可能でさえありますか?それは多かれ少なかれ効率的でしょうか?助けてくれてありがとう。
SELECT
book.ID as actual_book_id,
book.post_title,
book.post_status,
read.*
FROM books as book
LEFT OUTER JOIN book_club as read
ON read.book_id = book.ID
AND read.user_id = $userID
WHERE book.post_type = 'book'
AND book.post_status IN ('publish','trash')
ORDER BY
book.post_title ASC
$userIDがユーザーに関連する有効な整数であると想定します