2009-11-10 28 views
0

我正在尋找從MySQL獲取一個隨機行,而無需在系統上使用太多的時間或資源。我不在乎天氣代碼給出的是PHP或MySQL的基礎,但是請注意我的表中存在'空白'。帶有PHP的隨機MySQL行 - 低系統資源

我的表列 'ID'(主鍵,自動遞增),VARCHAR,INT,INT

我希望它儘可能隨機

+2

對此問題已有多個答案。做一個搜索。 – dnagirl 2009-11-10 19:56:18

+0

你關心概率分佈嗎? – 2009-11-10 19:56:38

+1

Duplicate:http://stackoverflow.com/questions/142242/what-is-the-best-way-to-pick-a-random-row-from-a-table-in-mysql – 2009-11-10 20:01:56

回答

1

我會做兩個查詢,總共三個步驟。

  1. 查找使用SELECT COUNT(*) FROM your_table
  2. 使用PHP的math functions找到介於0和行數的隨機數表中的行數
  3. 得到你想要使用SELECT * FROM your_table LIMIT 200, 1的實際數據,其中200是你在步驟2中計算出的隨機數。
+1

您可以在存儲過程中執行所有操作,從而節省訪問次數並返回。如果數據庫位於不同的主機上,則可以額外減輕網絡服務器的負載,因此它可用於其目的... – 2009-11-10 20:18:11

+0

正確。我沒有定期使用存儲過程,所以我不考慮在他們會用的地方使用它們:) – mwalling 2009-11-10 20:33:54

0

您可以使用:

SELECT id FROM table ORDER BY RAND() limit 1 
+2

不用了,這個表格有太多的行數,爲了有效 – RSully 2009-11-10 19:59:34

+2

是真的。但資源貪婪。 – dnagirl 2009-11-10 19:59:57

+0

它怎麼會不貪心?如果我們試圖從一個有缺口的表中得到單行,唯一的方法是A)得到一個隨機記錄,B)確保我們返回的有效記錄是詳盡的 - 即考慮所有主鍵的集合在桌子上,隨機挑一個。使用概率方法,您不能保證返回有效的記錄。但是,如果這不是問題(如果你不需要你總是得到有效的記錄),那麼mwalling就有下面的解決方案。 – 2009-11-10 20:10:20