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 primera tabla derivada selecciona artículos únicos de los que un usuario determinado conoce una o más palabras, así como el order
máximo valor de esas palabras. El valor de orden máximo se usa para clasificar los resultados finales de modo que los artículos que contienen palabras de orden alto aparezcan primero.
La segunda tabla derivada cuenta el número de palabras que un usuario determinado no conoce para cada artículo. Esta tabla se usa para excluir cualquier artículo que contenga 10 o más palabras que el usuario no conoce.