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
První odvozená tabulka vybírá jedinečné články, z nichž daný uživatel zná jedno nebo více slov, a také maximální order
hodnotu těch slov. Hodnota maximálního pořadí se používá k seřazení konečných výsledků tak, aby se články obsahující slova vyššího řádu objevily jako první.
Druhá odvozená tabulka počítá u každého článku počet slov, která daný uživatel nezná. Tato tabulka se používá k vyloučení všech článků, které obsahují 10 nebo více slov, která uživatel nezná.