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
最初の派生テーブルは、特定のユーザーが1つ以上の単語を知っている一意の記事と、最大のorder
を選択します。 それらの言葉の価値。最大順序値は、上位の単語を含む記事が最初に表示されるように最終結果を並べ替えるために使用されます。
2番目の派生テーブルは、特定のユーザーが各記事について知らない単語の数をカウントします。このテーブルは、ユーザーが知らない単語が10個以上含まれている記事を除外するために使用されます。