2010-10-28 7 views
1

Je les 5 tableaux suivants:MySQL Query Aide

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) 

Je suis en train d'obtenir une requête qui sélectionne tous les livres un utilisateur a achevé la révision.

Un utilisateur aura fini d'examiner un livre s'ils ont fait ce qui suit pour chaque phrase source:

utilisateur a suggéré un synonyme de l'expression source (reader_id dans le tableau de synonym_phrases est l'identifiant de l'utilisateur)

OU

l'utilisateur a noté synonyme de l'expression source (rater_id dans le tableau de synonym_ratings est l'identifiant de l'utilisateur)

J'ai passé une journée entière à essayer d'obtenir cela sans joie. Toute aide serait très appréciée.

Répondre

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

Merci Quassnoi, mais la requête ci-dessus renvoie un livre s'il existe une phrase source sans synonymes suggérés mais que l'utilisateur a attribué un synonyme à une autre expression source du livre. – freshest

+0

@Bill: voir après la mise à jour, n'a pas eu votre tâche correctement en premier. – Quassnoi

+0

@Quassnoi: les livres sont sélectionnés si aucune source_phrases n'a été ajoutée – freshest