我需要從乙個資料庫表中隨機的獲取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 這種方法在資料據量非常小的時候,效能不會有什麼大的影響。如果資料量非常龐大時,這將是致命的 因為你需要遍歷整個表進行排...