2009-09-05 54 views
0
SELECT videos.id, videos.game_id, videos.xbox360, videos.ps3, videos.pc, 
    videos.wii, videos.other, videos.thumbnail, videos.vid_info, videos.sdvid, 
    videos.hdvid, UNIX_TIMESTAMP(videos.date_added) , game_data.name, 
    AVG(video_ratings.rating) 
FROM videos, game_data, video_ratings 
WHERE videos.game_id = game_data.id 
    AND videos.id = video_ratings.video_id 
GROUP BY videos.id, video_ratings.video_id 
ORDER BY videos.date_added DESC LIMIT 10; 

我运行此查询从三个表video_ratingsgame_data,视频中提取数据...如何在外键不返回任何内容时在MySQL中选择记录?

现在我面临的问题是,结果只显示已被评为(或者是在视频表video_ratings),因为AND videos.id = video_ratings.video_id ...

有什么办法,我可以选择所有的视频数据,结果表明AVG(video_ratings.rating)为空,如果为这些影片的收视率不存在video_ratings表(或者说没有的视频已被评分,因此结果必须显示10行AVG(video_ratings.rating)列空)...

感谢

回答

3

呀,只是用左外内而不是内部连接(这是你在做什么)。我也建议你改用JOIN语法。它更清晰:

SELECT v.id, v.game_id, v.xbox360, v.ps3, v.pc, v.wii, 
v.other, v.thumbnail, v.vid_info, v.sdvid, v.hdvid, 
UNIX_TIMESTAMP(v.date_added), gd.name, AVG(vg.rating) 
FROM videos v 
LEFT JOIN game_data gd ON gd.id = v.game_id 
LEFT JOIN video_ratings vr ON v.id = vr.video_id 
GROUP BY videos.id, video_ratings.video_id 
ORDER BY videos.date_added DESC LIMIT 10 
+0

这是显示一个愚蠢的错误..我不知道为什么??#1054 - 未知列'videos.id'在'字段列表'....我的查询运行完全正常你的也似乎合法! – halocursed 2009-09-05 09:03:07

+0

谢谢你克莱斯先生 – halocursed 2009-09-05 09:12:03

相关问题