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
Pierwsza tabela pochodna wybiera unikalne artykuły, z których dany użytkownik zna jedno lub więcej słów, a także maksymalną order
wartość tych słów. Maksymalna wartość porządku jest używana do sortowania ostatecznych wyników, tak aby artykuły zawierające słowa wysokiego rzędu pojawiały się jako pierwsze.
Druga tabela pochodna zlicza liczbę słów, których dany użytkownik nie zna dla każdego artykułu. Ta tabela służy do wykluczania wszelkich artykułów zawierających 10 lub więcej słów, których użytkownik nie zna.