萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 從mysql數據表中隨機取出一條記錄

從mysql數據表中隨機取出一條記錄

mysql中隨機記錄的函數是rand()這個函數對於幾百條數據通常是看不出問題,但上萬了就會有些問題了,下面我們一起來看一朋友面試題得出來的一些更好的辦法。

今天去蘇州的一家網絡建設公司面試,老板給了我一道題目:php中如何從數據表products中隨機取出一條數據?

當然最後我的一段代碼有錯誤的,並不是真正意義上的隨機取數據。回到家,趕快百度,這才知道了如何隨機取數據..

其余代碼不多說,這裡就告訴你這句核心查找數據表代碼:

 代碼如下 復制代碼

select * from 表名 order by rand( ) limit 1;  //此處的1就是取出數據的條數

但這樣取數據網上有人說效率非常差的,那麼要如何改進呢

搜索Google,網上基本上都是查詢max(id) * rand()來隨機獲取數據。

 代碼如下 復制代碼

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

但是這樣獲得的是5條連續的記錄。解決辦法只能是每次查詢一條,查詢5次,但這個又不能滿足我的要求了,我要一次找幾條

高效寫法

 代碼如下 復制代碼

SELECT * FROM user  WHERE userId >= ((SELECT MAX(userId) FROM user )-(SELECT MIN(userId) FROM user )) * RAND() + (SELECT MIN(userId) FROM user )  LIMIT 5

這樣測試發現滿足了我的要求同時測試10W數據也只要0.0幾秒非常的快。

copyright © 萬盛學電腦網 all rights reserved