sql >> Base de Datos >  >> RDS >> Mysql

La consulta MySQL compleja está dando resultados incorrectos

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.