用平均的奇怪的SQL查询

时间:2017-05-29 17:20:09

标签: php mysql

我正试图用这个查询我的数据库:

SELECT ar.email, tr.trackid, al.albumtitle, al.albumid, al.publishingdate, tr.genre, tr.tracktitle, ar.artistname, tr.reproductions, CEIL(AVG(co.rating)) AS 'media' 
FROM tsn_tracks tr, tsn_albums al, tsn_artists ar, tsn_comments co 
WHERE al.email=ar.email AND tr.albumid=al.albumid  tr.trackid = co.trackid
GROUP BY tr.trackid
ORDER BY al.publishingdate desc 
LIMIT 0, 20

我会很快解释这个方案:我希望以发布日期(最近的)的顺序检索前20首歌曲,具有所有不同的属性,特别是,用户可以写出关于轨道的评论并留下投票(从1到5)在他们的评论中,在我的查询中我想显示每首歌的平均投票,但是当一首歌没有收到任何评论时,它不会出现在结果集中(因为“tr”) .trackid = co.trackid“)。我尝试了许多不同的方法,但没有解决问题。我希望当一首歌没有任何评论时,我的查询会给我一个特定的值(例如0)。

抱歉我的英文!

1 个答案:

答案 0 :(得分:0)

使用JOIN而不是在FROM和WHERE中使用everthing将允许您使用LEFT JOINS。这意味着即使右侧的表(名义上)没有匹配的记录,也会检索到一行。

SELECT ar.email, tr.trackid, al.albumtitle, al.albumid, 
        al.publishingdate, tr.genre, tr.tracktitle, ar.artistname,
        tr.reproductions, CEIL(AVG(co.rating)) AS 'media' 
    FROM tsn_tracks tr
    JOIN tsn_albums al on tr.albumid=al.albumid 
    JOIN tsn_artists ar ON al.email=ar.email
    LEFT JOIN tsn_comments co ON tr.trackid = co.trackid
    GROUP BY tr.trackid
    ORDER BY al.publishingdate desc 
    LIMIT 0, 20