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_ratingsこのクエリを実行して、3 つのテーブル、、game_dataビデオからデータを抽出しています...

今私が直面している問題は、評価された(またはテーブルにあるvideo_ratings)ビデオのみが結果に表示されることですAND videos.id = video_ratings.video_id...

すべてのビデオのデータを選択して、それらのビデオの評価がテーブルAVG(video_ratings.rating)に存在しない場合、結果が null として表示される方法はありますか (または、どのビデオも評価されていないため、結果は次の列の 10 行を表示する必要があります)ヌル ) ...video_ratingsAVG(video_ratings.rating)

ありがとう

4

1 に答える 1

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
于 2009-09-05T08:55:28.200 に答える