我有以下 5 个表:
users(user_id)
books(book_id, author_id)
source_phrases(source_phrase_id, book_id, phrase)
synonym_phrases(synonym_phrase_id, source_phrase_id, reader_id, synonym)
synonym_ratings(synonym_ratings_id, synonym_phrase_id, rater_id, rating)
我正在尝试获取一个查询,该查询将选择用户已完成审阅的所有图书。
如果用户对每个源短语执行了以下操作,他们就完成了对一本书的评论:
用户为源短语建议了一个同义词(synonym_phrases 表中的 reader_id 是用户 id)
或
用户对源短语的同义词进行了评分(synonym_ratings表中的rater_id为用户id)
最佳答案
SELECT b.*
FROM books b
WHERE book_id NOT IN
(
SELECT sp.book_id
FROM source_phrases sp
WHERE source_phrase_id NOT IN
(
SELECT syp.source_phrase_id
FROM synonym_phrases syp
WHERE reader_id = @user_id
)
AND source_phrase_id NOT IN
(
SELECT syp.source_phrase_id
FROM synonym_phrases syp
JOIN synonym_ratings sr
ON sr.synonym_phrase_id = syp.synonym_phrase_id
AND sr.rater_id = @user_id
)
)
AND book_id IN
(
SELECT sp.book_id
FROM source_phrases sp
)
关于MySQL 查询 : select all the books a user has completed reviewing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042004/