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.