MySQL Query: выберите все книги, которые пользователь просмотрел - PullRequest
1 голос
/ 28 октября 2010

У меня есть следующие 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)

Я пытаюсь получить запрос, который выберет все книги, просмотренные пользователем.

Пользователь завершит рецензированиекнигу, если они сделали следующее для каждой исходной фразы:

Пользователь предложил синоним исходной фразы (reader_id в таблице synonym_phrases - идентификатор пользователя)

ИЛИ

Пользователь оценил синоним исходной фразы (rater_id в таблице synonym_ratings - это идентификатор пользователя)

1 Ответ

2 голосов
/ 28 октября 2010
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
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...