2011-05-03 17 views
1

我讀過這個問題:In Django, how do I select 100 random records from the database?
並試圖使用Content.objects.all().order_by('?')[:30],但這會產生一些重複的項目。那麼如何從數據庫中選擇30 獨特的隨機值?如何使用django從數據庫(MySQL)中選擇30個唯一的隨機值?

+0

對於數百萬計的項目:您可以修改模型嗎?每次**需要不同的訂單嗎?您可以在模型中創建一個'int'索引併爲其分配'randint(MAXINT)'。然後'order_by('randindex')'。重置訂單爲「O(n)」,但可行(例如每小時/每天)。 – ppvi 2012-07-30 10:16:55

回答

2

如果您在數據庫中有可管理數量的條目(即不是數千個),這將起作用,並且即使它擊中db兩次,它可能比order_by('?')效率高得多。

import random 
content_pks = Content.objects.values_list('pk', flat=True) 
selected_pks = random.sample(content_pks, 30) 
content_objects = Content.objects.filter(pk__in=selected_pks) 
+0

數據庫中將有數千個項目... – wong2 2011-05-03 15:29:47

+0

仍然可能是可行的。對其進行配置並查看。 – 2011-05-03 15:30:19

+0

當然選擇數以千計的ID應該不成問題。這只是一個專欄! – jathanism 2011-05-03 15:55:09

相關問題