Mysql
 sql >> Database >  >> RDS >> Mysql

La query MySQL complessa sta dando risultati errati

select * from (
    select a.idArticle, a.content, max(`order`) max_order
    from words_learned wl
    join words w on w.idwords = wl.idwords
    join article a on a.idArticle = w.idArticle
    where wl.userId = 4
    group by a.idArticle
) a
left join (
    select count(*) unknown_count, w2.idArticle from words w2
    left join words_learned wl2 on wl2.idwords = w2.idwords
    and wl2.userId =  4
    where wl2.idwords is null
    group by w2.idArticle
) unknown_counts on unknown_counts.idArticle = a.idArticle
where unknown_count is null or unknown_count < 10
order by max_order desc
limit 100

http://sqlfiddle.com/#!2/6944b/9

La prima tabella derivata seleziona gli articoli univoci da cui un determinato utente conosce una o più parole e l'order massimo valore di quelle parole. Il valore massimo dell'ordine viene utilizzato per ordinare i risultati finali in modo che gli articoli contenenti parole di ordine elevato vengano visualizzati per primi.

La seconda tabella derivata conta il numero di parole che un determinato utente non conosce per ogni articolo. Questa tabella viene utilizzata per escludere tutti gli articoli che contengono 10 o più parole che l'utente non conosce.