Mysql
 sql >> Base de données >  >> RDS >> Mysql

La requête MySQL complexe donne des résultats incorrects

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 première table dérivée sélectionne des articles uniques dont un utilisateur donné connaît un ou plusieurs mots ainsi que l'order maximum valeur de ces mots. La valeur de commande maximale est utilisée pour trier les résultats finaux afin que les articles contenant des mots de poids fort apparaissent en premier.

La deuxième table dérivée compte le nombre de mots qu'un utilisateur donné ne connaît pas pour chaque article. Ce tableau est utilisé pour exclure tous les articles contenant 10 mots ou plus que l'utilisateur ne connaît pas.