Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A consulta complexa do MySQL está dando resultados incorretos

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

A primeira tabela derivada seleciona artigos exclusivos que um determinado usuário conhece uma ou mais palavras, bem como o máximo de order valor dessas palavras. O valor máximo de ordem é usado para classificar os resultados finais para que os artigos que contenham palavras de ordem alta apareçam primeiro.

A segunda tabela derivada conta o número de palavras que um determinado usuário não conhece para cada artigo. Esta tabela é usada para excluir quaisquer artigos que contenham 10 ou mais palavras que o usuário não conheça.