他們原來都想用php的實現隨機,但取出多條好像要進行兩次以上查詢.
翻了手冊,找到了下面這個語句,可以完成任務了,但效率較低
select * from table_name order by rand() limit 5;
rand在手冊裡是這麼說的:
rand()
rand(n)
返回在範圍0到1.0內的隨機浮點值。如果乙個整數引數n被指定,它被用作種子值。
mysql> select rand();
-> 0.5925
mysql> select rand(20);
-> 0.1811
mysql> select rand(20);
-> 0.1811
mysql> select rand();
-> 0.2079
mysql> select rand();
-> 0.7888
你不能在乙個order by子句用rand()值使用列,因為order by將重複計算列多次。然而在mysql3.23中,你可以做: select * from table_name order by rand(),這是有利於得到乙個來自select * from table1,table2 where a=b and c
但我試了一下,8千條記錄的表,執行一次需要0.08 sec,.慢了些
後來請教了google,得到如下**
select *
from table_name as r1 join
(select round(rand() *
(select max(id)
from table_name)) as id)
as r2
where r1.id >= r2.id
order by r1.id asc
limit 5;
執行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支援這樣的子查詢.
下面是其它網友的補充:
select id from zhyx_items order by rand() 這樣效率太低了
優化sql語句之後:
select t1.id
from zhyx_items as t1 join
(select round(rand() *
((select max(id) from zhyx_items)-(select min(id) from zhyx_items))+
(select min(id) from zhyx_items)) as id) as t2
where t1.id >= t2.id
order by t1.id limit 0,5;
MySQL中如何取隨機數
現在,假設需要產生234到5678之間的隨機整數,mysql下怎麼實現。我們無法改mysql下rand的產生值,但我們可以改變我們的需求,1 我們需要最小是234,最大是5678,rand產生的最小是0,最大是1,我們需求的數減去234看看?最小數234 234 0,最大數5678 234 5444...
ojbc 取隨機數
隨機數的使用 1 arc4random 比較精確不需要生成隨機種子 使用方法 通過arc4random 獲取0到x 1之間的整數的 如下 int value arc4random x 獲取1到x之間的整數的 如下 int value arc4random x 1 2 ccrandom 0 1 coc...
PHP 取隨機數
假設 有四個選項 a 佔 10 b佔20 c佔30 d 佔 40 原理就是現獲取隨機數,然後找區間。當然了,選項的數量可以任意。目前預設是 總和是 100 如果需要別的數,修改 隨機數的範圍即可。這個演算法,比較簡單,效率也還算高。當然因為是 rand 所以產生的是偽隨機數,不是真正意義上的隨機,能...