當前我想要做的是從一組200中獲得30個數字的塊。例如,因爲這將與MySQL一起使用,我想選擇30個隨機數來自200張圖像數據庫的圖像。我希望能夠在限制語句中使用兩個數字(高和低),以便返回像這樣的30行數據:SELECT * FROM 'images' LIMIT 20,50
或SELECT * FROM 'images' LIMIT 10,40
。我知道這可能聽起來像一個愚蠢的問題,儘管我的大腦現在剛剛好了。所有幫助非常感謝!謝謝:)從200個數字中選擇一個隨機大小的30個數字
回答
只需將ORDER BY RAND()
添加到您的查詢。它是「充分」隨機的。
SELECT FOO FROM BAR ORDER BY RAND() LIMIT 30
order by rand()是一個反模式,所以不應該在沒有兩次思考的情況下使用它。 – 2012-08-16 02:43:36
'SELECT 30 FROM'圖像'ORDER BY RAND();'從圖像表中選擇30個隨機圖像,然後? – 2012-08-16 02:46:31
感謝編輯@Brad。從我的移動如此有限的編輯選項回答。 – 2012-08-16 02:47:09
我建議使用PHP的array_rand()
。無論你想從一個陣列中選擇,並讓它挑選20項爲您
http://php.net/manual/en/function.array-rand.php
看跌。然後,您可以使用任何您想要的文件名,而不必依賴它們的編號順序。
還要注意,這是一個PHP解決方案。這就是你的問題被標記爲。如果您想要一個SQL解決方案,請與Burhan的示例一起使用。 – Brad 2012-08-16 02:42:37
使用ORDER BY RAND()
被認爲是因爲你迫使數據庫執行全表掃描和昂貴的排序操作的反模式。
從查詢緩存中受益,可以作出這樣一個混合解決方案:
// take all image ids
$keys = $db->query('SELECT image_id FROM images')->fetchALL(PDO::FETCH_COLUMN, 0);
// pick 30
$random_keys = join(',', array_rand(array_flip($keys), 30));
// query those images only
$values = $db->query("SELECT * FROM images WHERE image_id IN ($random_keys)")->fetchAll(PDO::FETCH_ASSOC);
以上查詢鍵可以在PHP緩存,因此它可以用於更頻繁的請求。 但是,當你的表格變得在100k或更多的範圍內時,我建議用隨機順序創建一個帶圖像ID的單獨表格,你可以加入圖像表格。您可以使用ORDER BY RAND()
每天填充一次或幾次。
從長遠來看,這會更快,然後使用'$ query =「SELECT * FROM'images'ORDER BY RAND()LIMIT 30;」;'我唯一擔心的是,當數據庫變大時,查詢將花費更長的時間來執行。 – 2012-08-16 02:57:24
@scjosh使用'ORDER BY RAND()'將強制進行全表掃描和手動排序,所以如果你的表增長很大,並且你需要經常訪問這些信息(即每次請求),我的方法會更好,因爲你可以在PHP中緩存圖像id。 – 2012-08-16 02:59:01
@scjosh當你的表增長超過幾十行時,你應該考慮用隨機鍵創建一個單獨的表,你可以加入圖像表;您可以使用rand()命令每天構建表,因爲它只運行一次:) – 2012-08-16 03:02:01
- 1. 唯一隨機選擇一個數組中的數字
- 2. 選擇一個隨機數
- 3. C++從隨機數字遊戲開始,rand從中選擇一個數字
- 4. SQL:從數據庫中選擇最多一個數字(大小)
- 5. 從MySQL中的一組數字中挑選一個隨機數
- 6. 如何從數組中隨機選擇一個字符串
- 7. 從一組數字中挑選一個隨機數
- 8. 哪個數字更大,以及隨機數的大小
- 9. 根據隨機數字選擇一個字符串
- 10. 如何從2個不同的數字範圍中選擇1個隨機數?
- 11. 如何從枚舉中選擇10個隨機卡(或數字)
- 12. 如何在javascript中選擇一個隨機數字?
- 13. 從一個集合中選擇N個隨機數
- 14. 在numpy中,我如何從一個範圍中隨機選擇一個數字,排除之前選擇的隨機數字?
- 15. 從兩個數字中選擇一個數字。 R
- 16. 從隨機數序列中選擇相同大小的數字組
- 17. 從Android的strings.xml中隨機選擇一個字符串
- 18. 如何隨機選擇三個字符串中的一個?
- 19. 如何從SQL中的一組數字中選擇隨機數
- 20. 選擇3個隨機單詞(記錄) - 每個字母的一個計數
- 21. 從一個範圍中選擇數字
- 22. 從一個表中選擇數據的字段大於另一個表中另一個字段的數據
- 23. 隨機選擇一個函數
- 24. 選擇一個隨機函數
- 25. 如何隨機選擇一個數組?
- 26. jQuery - 隨機選擇數字
- 27. 隨機數字選擇
- 28. 在一個數字中選擇一個特定的數字
- 29. 從整數列表中選擇一個隨機數
- 30. jQuery從字符串數組中挑選一個隨機值
圖像數量是否會顯着增加到200以上?這些數據是否經常要求? – 2012-08-16 02:42:39
是的,它會增長,因爲我將使用'num_rows'來代替200. – 2012-08-16 02:44:17