sql >> Database >  >> RDS >> Mysql

Complexe MySQL-query geeft onjuiste resultaten

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

De eerste afgeleide tabel selecteert unieke artikelen waarvan een bepaalde gebruiker een of meer woorden kent, evenals de maximale order waarde van die woorden. De maximale bestelwaarde wordt gebruikt om de uiteindelijke resultaten te sorteren, zodat artikelen met woorden van hoge orde als eerste verschijnen.

De tweede afgeleide tabel telt het aantal woorden dat een bepaalde gebruiker niet kent voor elk artikel. Deze tabel wordt gebruikt om artikelen uit te sluiten die 10 of meer woorden bevatten die de gebruiker niet kent.




  1. GROUP_CONCAT meerdere velden met een ander scheidingsteken

  2. FOUT:toestemming geweigerd voor relatietabelnaam op Postgres tijdens het proberen van een SELECT als een alleen-lezen gebruiker

  3. Krijg alle ingevoegde ID's bij het invoegen van meerdere rijen met een enkele zoekopdracht

  4. SQLite-trigger