2011-02-05 42 views
0

在php中 - 如何隨機顯示5個可能的結果50個結果,但要確保所有結果的顯示數量相等。php - 如何隨機顯示5個可能的50個結果,但確保所有結果都顯示等量

例如,表格有50個條目。 我希望隨每個頁面加載顯示其中的5個,但也需要確保所有結果都旋轉顯示相同的次數。 我花了幾個小時搜索這個,但不能解決它 - 非常喜歡你的幫助。

+1

它將根據定義等於,lol。沒有必要擔心 – 2011-02-05 13:08:55

+0

哈哈,就像德國不能按憲法破產的事實一樣令人欣慰D – 2011-02-05 13:14:13

回答

1

將50個結果複製到某個臨時位置(文件,數據庫,無論您使用什麼)。然後每次需要隨機值時,從50中選擇5個隨機值,並從臨時數據集中刪除它們。

一旦您的臨時數據集爲空,請重新創建一個新的臨時數據集。

2

如果您不想閱讀,請向下滾動以獲得「偏向隨機性」。

在mysql中,你可以使用SeleCT * From table order by rand() limit 5

你想要的只是不起作用。它邏輯上矛盾。

你必須明白,根據定義完全隨機意味着在無限的時間段之後均等分配。

選擇的間隔越長,分佈越均勻。

如果您必須每隔24h間隔均勻分配選區,則不能使用隨機算法。這是定義矛盾的。

這真的取決於你的目標是什麼。

例如,您可以隨機抽取一些元素,然後降低下次運行時重新選擇相同元素的可能性。通過這種方式,您可以進行啓發式操作,在更短的時間內爲您提供更均勻的分配。但它不是隨機的。好的某些部分是。

您也可以從數據庫中隨機選擇,將元素標記爲選中狀態,現在只從尚未選中的元素中進行選擇。沒有元素時,全部重置。

非常微不足道,但可能會做你的工作。

你也可以用時間戳做這樣的事情,使分佈更加優雅。

這可能看起來像ORDER BY RAND()*((timestamps-min(timestamps))/(max(timetamps)-min(timestamps))) DESC或類似的東西。基本上,你可以使用時間間隔窗口來標準化一個條目選擇的時間戳,所以它得到0到1之間的數值,然後乘以rand ..然後你有50%的新鮮東西被選擇和50%的隨機性...我我不確定上面的公式,只是輸入它。可能是錯誤的,但原理起作用。

我認爲你想要的東西通常被稱爲「偏向隨機性」。有很多這方面的論文和關於SO的一些文章。例如這裏:

Biased random in SQL?