回答
如果你能夠生成隨機存在的id,我認爲最好的方法是使用一個像where id in (id1, id2, id3, id4)
這樣的子句。這將導致在一個查詢中獲得4條記錄,因此不會獲取不必要的查詢或記錄。
如前所述,where id in (id1, id2, id3, id4)
是從MySQL角度來看最快的方式。實際上,在生成這些ID的應用程序中需要一些邏輯:所有4個ID必須存在,隨機分佈,並且您希望避免重複。在最壞的情況下,您將通過巨大查詢檢索所有existend ID的列表,提取4個隨機值並重新查詢。
用做所有的邏輯,它可以是明智的選擇移動到MySQL:
SELECT * FROM foobar
ORDER BY RAND()
LIMIT 4;
你必須明白,這是在MySQL慢,但你必須在應用程序的速度增益邏輯,並且可以肯定地獲得隨機值在你的桌子上平均種子。
編輯: 該評論詢問PHP是否在此任務緊固然後MySQL。答案是否定的。 這不是通過「使用蘭特」來完成的。你需要一個包含PHP中所有這些ID的數組。這是一個巨大的查詢,大量的TCP流量,巨大的數組將被建立在PHP中,巨大的樹將被zend引擎建立。然後,使用這些ID,您必須啓動第二個查詢以獲取這些ID的行。
選擇所有的行,並在PHP中使用rand比rand更快嗎? – user2409399
@ user2409399我更新了我的答案並用「php」重新簽名了您的問題 –
在php中用rand()進行了巨大查詢?用4個ID的? – bestprogrammerintheworld
儘管RAND()
函數可能會很慢,但到目前爲止我還沒有遇到速度問題。我的策略實際上是將數據庫加入到查詢本身,並返回一個帶有限制的隨機ID列表。
SELECT *
FROM table AS t1
JOIN (
SELECT rowID
FROM table
ORDER BY RAND()
LIMIT 4
) AS t2
WHERE t1.rowID = t2.rowID
還有存在一個更強大的解決方案 - 嘗試檢查出this question(2010年提出)。
- 1. 選擇* vs選擇所有列名稱
- 2. 選擇其中列表或者選擇所有最優雅的
- 3. 如何選擇表列LIKE?的所有列,其中用戶選擇值
- 4. SQL選擇所有列從多個表
- 5. MySQL - 選擇所有列其中一列是DISTINCT
- 6. Oracle - 選擇其中一列滿足謂詞的所有列表
- 7. 選擇列A中列B ='值'的條目列表。然後,選擇所有條目,其中A列在名單
- 8. jquery選擇多選下拉列表中的所有值
- 9. DBI選擇所有VS
- 10. 選擇多列R vs python pandas
- 11. 從多選列表中複製所選項目到其他多選列表
- 12. 從UNION中選擇多個表中的相同列有沒有其他選擇?
- 13. MySQL的 - 選擇其中的所有其它列= 0
- 14. 選擇列,其中值列有多個數據分離逗號
- 15. 選擇除列以外的所有列
- 16. 其他列選擇列
- 17. 選擇其中列1 = COLUMN2
- 18. 選擇所有列,按其他要求組合一列
- 19. SQL選擇,其中列有字母
- 20. 選擇行,其中有重複列
- 21. 從列中選擇所有項目
- 22. 選擇列中的所有負值
- 23. 列表框中選擇所有項目
- 24. 選擇所有列表中的項目
- 25. 從表格中選擇其他行中所有列的行
- 26. 從表中選擇所有,其中2列是不同的
- 27. 選擇列並隱藏其他選擇
- 28. 選擇查詢並選擇多列,其中一列應該是不同的mssql
- 29. 從其他選擇列表中選擇列表人口
- 30. 選擇/取消選擇列表視圖中的所有項目
你想從數據庫中隨機選擇4行?最好在一個請求中全部選中它們。 – Anujan
你究竟想達到什麼目的?你有任何代碼要顯示嗎?你現在使用哪種方法,爲什麼? – bestprogrammerintheworld