mysql 隨機獲取一條或多條數據


若要在i ≤r≤ j 這個范圍得到一個隨機整數r ,需要用到表達式 FLOOR( RAND() * (j – i)+i),RLOOR()取整樹部分,RAND()生成0~1的隨機數、ROUND(x,n)四舍五入取整,ROUND(x,n)表示四舍五入返回數字x的n位小數的數字,n可以是負數,這時是指定小數點左邊的n位整數位為0,同時小數位均為0;

 

例如, 若要在7 到 12 的范圍(包括7和12)內得到一個隨機整數, 可使用以下語句:

SELECT  FLOOR(RAND()*(12-7)+7) 

如:3.434561和3.2452 保留2位小數取值

round(3.434561, 2) = 3.43;

round(3.2452, 2) = 3.25;

round(1113.2452, -2) = 1100;

從 Mysql 表中隨機讀取數據不難,方法還挺多的,但是如果要考慮效率,得到一個快速的高效率的方法。

隨機獲得Mysql數據表的一條或多條記錄有很多方法,下面以users(userId,userName,password……)表,百多萬條以上記錄為例:

1、常規使用方法

SELECT * FROM  users  ORDER BY RAND() LIMIT 1

結論:效率最慢,在 ORDER BY從句里面不能使用RAND()函數,因為這樣會導致數據列被多次掃描,導致效率相當相當的低!

2、SELECT * FROM users AS U0

JOIN

(SELECT FLOOR( RAND()*((SELECT MAX(U1.userid) FROM users AS U1)-(SELECT MIN(U2.userid) FROM users AS U2) ) +(SELECT MIN(U3.userid) FROM users AS U3)) AS userid ) AS U4 

ON U0.userid>= U4.userid 

 LIMIT 1

結論:隨機一條數據效率還行,多條就不行

3、通過sql獲得最大值和最小值,然后通過php的rand生成一個隨機數randnum,再通過SELECT * FROM users WHERE userId >= randnum LIMIT 1

SELECT * FROM users WHERE 

users.userid>= FLOOR( RAND()*((SELECT MAX(U1.userid) FROM users AS U1)-(SELECT MIN(U2.userid) FROM users AS U2) ) +(SELECT MIN(U3.userid) FROM users AS U3)) 

ORDER BY users.userid ASC 

LIMIT 1

結論:隨機取一條或多條記錄,方法都不錯! (最佳方案)

 

附:field(column,value1,value2,value3,……) 代表根據column列自定義的順序排

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM