mysql獲得隨機數據的辦法。本站提示廣大學習愛好者:(mysql獲得隨機數據的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql獲得隨機數據的辦法正文
1.order by rand()
數據多了極慢,隨機性異常好,合適異常小數據量的情形。
SELECT * FROM table_name AS r1 JOIN (SELECT (ROUND(RAND() * (SELECT ABS(MAX(id)-MIN(id)-$limit) FROM table_name))+(SELECT MIN(id) from table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT $limit;
速度異常快,然則獲得的數據是id持續的,沒方法處理。
子查詢發生一個隨機數。
rand()是0到1的隨機數,可以等於0到1。
MAX(id)-MIN(id)還要要減去$limit以避免成果數目不敷$limit條
由於主表id能夠不持續,所以r1.id要>=r2.id
還要留意的是有時刻最小id不是從1開端的,能夠從一個很年夜的數開端,所以必需加上M(id)的值
手冊相干內容:若要在i ≤ R ≤ j 這個規模獲得一個隨機整數R ,須要用到表達式 FLOOR(i + RAND() * (j – i + 1))。
例如, 若要在7 到 12 的規模(包含7和12)內獲得一個隨機整數, 可以使用以下語句:
SELECT FLOOR(7 + (RAND() * 6));
select * from test where rand()>0.0005 limit 10;
0.0005是一個盤算出的比例直接關系到隨機的質量,好比數據表10000條數據,須要隨機取300條,那末0.0005就須要改成(300/10000=0.03)。
這類辦法不克不及包管每次能取到若干,須要取屢次。
2和3速度一樣的快,重要差別是2總能前往limit條數據,3就沒准了(相符正太散布)。2是持續數據,3是隨機行。