我正试图用这个查询我的数据库:
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)。
抱歉我的英文!
答案 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