2010-10-28 2 views
1

У меня есть следующие 5 таблиц:MySQL Query Помощь

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 является пользователи идентификатор)

я провел целый день, пытаясь получить это не радость. Любая помощь приветствуется.

ответ

2
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 
     ) 
+0

Спасибо Quassnoi, но приведенный выше запрос возвращает книгу, если есть исходная фраза без предложенных синонимов, но пользователь оценил синоним другой исходной фразы книги. – freshest

+0

@Bill: см. Сообщение об обновлении, не получило вашу задачу правильно. – Quassnoi

+0

@Quassnoi: книги выбираются, если не добавлены никакие исходные фразы – freshest

Смежные вопросы