隨機獲取N條資料庫記錄的四個方法

2021-05-11 02:22:24 字數 1070 閱讀 9909

我需要從乙個資料庫表中隨機的獲取n條資料庫,最先想到的辦法是兩次訪問資料庫,第一次是獲得記錄條數m,然後在產生個n隨機數kj(0<=jj

<=m.然後獲取鍵值為kj的記錄數。

但是兩次查詢資料庫是其缺點,簡單實現方法如下:

$range_result = mysql_query( 」 select max(id) as max_id , min(id) as min_id from tb_name 「);

$range_row = mysql_fetch_object( $range_result );

$random = mt_rand( $range_row->min_id , $range_row->max_id );

$result = mysql_query( 」 select * from tb_name where id >= $random limit 0,1 「);

於是查閱其手冊(mysql),其中提到用order

by rand

() 和limit兩結合來獲取隨機記錄。另外google了一下,還發現了其他一些好的方法,特記錄下來:

1) 採用官方的方式

select * from tb_name order

by rand

() limit n

2)採用類似偏移方式

select * from tb_name

where id >= (select floor(max(id) * rand

()) from tb_name )

order

by id asc limit n;

3)優化的方式

select *

from tb_name as r1 join

(select round(rand

() *

(select max(id)

from tb_name)) as id2)

as r2

where r1.id >= r2.id2

order

by r1.id asc

limit n;

上述方法,第一種效率最低,第三種最好。

四種資料庫隨機獲取10條資料的方法

sql server select top 10 from t user order by newid oracle select from select from t user order by dbms random.random where ronum 10 mysql select from...

Oracle資料庫實現獲取前幾條資料的方法

如何在oracle資料庫中實現獲取前幾條資料的方法呢?就是類似sql語句中的select top n的方法。本文將告訴您答案,舉例說明了喲 1.在oracle中實現select top n 由於oracle不支援select top語句,所以在oracle中經常是用order by跟rownum的組...

隨機獲取資料庫表記錄行

1 隨機排序後獲取第一行 獲取隨機記錄的常見sql做法,就是對查詢結果進行隨機排序,然後獲取第一行。如 select from bugs order by rand limit 1 這種方法在資料據量非常小的時候,效能不會有什麼大的影響。如果資料量非常龐大時,這將是致命的 因為你需要遍歷整個表進行排...