2013-04-08 51 views
1

我想顯示包含5個最新評論的帖子列表。我如何用db查詢的最小數量來做到這一點?在django中預取有限數量的相關對象

Post.objects.filter(...).prefetch_related('comment_set') 

檢索所有評論,而我只需要他們幾個。

回答

1

我會去兩個查詢。首先得到的帖子:

posts = list(Post.objects.filter(...)) 

現在運行原始的SQL查詢與UNION(注:爲簡化起見,省略排序):

sql = "SELECT * FROM comments WHERE post_id=%s LIMIT 5" 
query = [] 
for post in posts: 
    query.append(sql % post.id) 
query = " UNION ".join(query) 

並運行它:

comments = Comments.objects.raw(query) 

之後,你可以循環評論並將它們分組在Python端。

我還沒試過,但看起來還好。

有您的問題(可能是越來越下降到一個查詢)其他可能的解決方案,看看這個:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

+0

跟着你提供的鏈接,並在那裏發現其中指出,另一個鏈接使用工會在性能方面更好。所以答案被接受了,謝謝) – Acute 2013-04-08 09:50:26