2012-08-30 51 views
0

這是一個後續行動,我提出here的問題。如果有'genre.name ='經典電影'和'star.name = Humphrey Bogart'等限制,我該如何確保我能夠收回10部電影。要清楚,查詢必須返回10部電影的數據,而不管過濾限制是什麼。SQL:控制多少記錄獲取返回2部分

SELECT movie.id, movie.title, star.name, star.name_url, dir.name, 
     dir.name_url, genre.name, genre.name_url 
FROM 
     (SELECT * FROM movie WHERE movie.id > 0 ORDER BY movie.id LIMIT 10) movie 
     LEFT JOIN actor 
      ON (movie.id = actor.movie_id) 
     LEFT JOIN person AS star 
      ON (actor.person_id = star.id) 
     LEFT JOIN director 
      ON (movie.id = director.movie_id) 
     LEFT JOIN person AS dir 
      ON (director.person_id = dir.id) 
     LEFT JOIN genre_classification 
      ON (movie.id = genre_classification.movie_id) 
     LEFT JOIN genre 
      ON (genre_classification.genre_id = genre.id) 

回答

1

的問題是你從數據庫中選擇的10部電影名單與本次選擇:

(SELECT * FROM movie WHERE movie.id > 0 ORDER BY movie.id LIMIT 10) movie 

如果你想篩選下來的是列表的詳細使用WHERE子句在這個子選擇外,你可能會得到小於那10行,因爲不是所有的10個都可以符合你的標準。你可以添加新的標準子選擇像這樣:

(SELECT * FROM movie m INNER JOIN genre_classification g on g.movie_id = m.id and g.name = 'Classic Movies' WHERE m.id > 0 ORDER BY m.id LIMIT 10) movie 

這將做同樣的事情,但只有給你(最多)10部電影誰了「經典電影」的匹配類型。

這當然會,還是返回超過10行,因爲你JOIN荷蘭國際集團在演員,導演,其他流派,等你應該,但是,有多達結果集中的十個不同的電影的ID。

完整的查詢:

SELECT movie.id, movie.title, star.name, star.name_url, dir.name, 
     dir.name_url, genre.name, genre.name_url 
FROM 
     (SELECT * FROM movie m INNER JOIN genre_classification g on g.movie_id = m.id and g.name = 'Classic Movies' WHERE m.id > 0 ORDER BY m.id LIMIT 10) movie 
     LEFT JOIN actor 
      ON (movie.id = actor.movie_id) 
     LEFT JOIN person AS star 
      ON (actor.person_id = star.id) 
     LEFT JOIN director 
      ON (movie.id = director.movie_id) 
     LEFT JOIN person AS dir 
      ON (director.person_id = dir.id) 
     LEFT JOIN genre_classification 
      ON (movie.id = genre_classification.movie_id) 
     LEFT JOIN genre 
      ON (genre_classification.genre_id = genre.id) 
+0

看來,如果沒有子查詢中,LIMIT限制,結果到十行(包括冗餘信息),這相當於數據約4電影。 –

+0

@MikeGirard - 是的,我現在從另一篇文章中看到你爲什麼使用子選擇。這非常好!只需將你的電影過濾添加到子選擇,你會很好去.. –

+0

這工作。謝謝。 –