2011-05-07 98 views
2

如何使用PHP從MySQL數據庫中選擇一個隨機入口?從MySQL數據庫中選擇隨機入口

我想選擇Author,AuthorText和Date?

+3

必須多人使用'蘭德公司爲了建議() ',這很好,但請記住,這是一個性能殺手。 – Maerlyn 2011-05-07 13:26:28

回答

6
SELECT Author, AuthorText, Date FROM table ORDER BY RAND() LIMIT 1 
+0

我得到一個資源2#錯誤? – CLiown 2011-05-07 13:31:39

+0

仔細檢查你的代碼,它可能是你的一個MySQL函數或查詢中的一個可變的錯字。或者在沒有字段日期的情況下嘗試。這可能會導致一些問題,因爲在MySQL中預定義的函數名稱順便說一句,如果你需要更好的性能,看看這篇文章http://explainextended.com/2009/03/01/selecting-random-rows/ – Jesse 2011-05-07 13:42:26

0

您可以通過隨機&下令限制爲1個一行如下:

select 
    author, authortext, date 
from bookstable 
order by rand() 
limit 1 
1
ORDER BY rand() LIMIT 1 

將表中的所有行,它是非常緩慢的排序。

更好的解決方案:假設你的表具有通常的主鍵自動增加字段,在min(id)和max(id)之間生成一個rendom數字並選擇最接近的id。

它不會像「真正的」隨機選擇那樣隨機,因爲在刪除id大的一個洞之後的id將被選擇的概率更高。但是,這需要50微秒,而不是2秒,如果你的表是大...

SET @t = (SELECT FLOOR(a + (b-a)*rand()) FROM (SELECT min(id) as a, max(id) as b FROM table) 
SELECT * FROM table WHERE id>@t ORDER BY id LIMIT 1;