Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Komplexe MySQL-Abfrage liefert falsche Ergebnisse

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

Die erste abgeleitete Tabelle wählt eindeutige Artikel aus, aus denen ein bestimmter Benutzer ein oder mehrere Wörter kennt, sowie die maximale order Wert dieser Worte. Der maximale Ordnungswert wird verwendet, um die Endergebnisse so zu sortieren, dass Artikel mit höherwertigen Wörtern zuerst erscheinen.

Die zweite abgeleitete Tabelle zählt die Anzahl der Wörter, die ein bestimmter Benutzer für jeden Artikel nicht kennt. Diese Tabelle wird verwendet, um alle Artikel auszuschließen, die 10 oder mehr Wörter enthalten, die der Benutzer nicht kennt.