《MYSQL數(shù)據(jù)庫MySQL取出隨機(jī)數(shù)據(jù)》要點(diǎn):
本文介紹了MYSQL數(shù)據(jù)庫MySQL取出隨機(jī)數(shù)據(jù),希望對您有用。如果有疑問,可以聯(lián)系我們。
他們原來都想用PHP的實現(xiàn)隨機(jī),但取出多條好像要進(jìn)行兩次以上查詢.
翻了手冊,找到了下面這個語句,可以完成任務(wù)了,但效率較低
SELECT?*?FROM?table_name?ORDER?BY?rand()?LIMIT?5;
rand在手冊里是這么說的:
RAND()?
RAND(N)?
返回在范圍0到1.0內(nèi)的隨機(jī)浮點(diǎn)值.如果一個整數(shù)參數(shù)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將重復(fù)計算列多次.然而在MySQL3.23中,你可以做:?SELECT?*?FROM?table_name?ORDER?BY?RAND(),這是有利于得到一個來自SELECT?*?FROM?table1,table2?WHERE?a=b?AND?c<d?ORDER?BY?RAND()?LIMIT?1000的集合的隨機(jī)樣本.注意在一個WHERE子句里的一個RAND()將在每次WHERE被執(zhí)行時重新評估.?
但我試了一下,8千條記錄的表,執(zhí)行一次需要0.08?sec,.慢了些
后來請教了google,得到如下代碼
MYSQL入門
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;
執(zhí)行效率需要0.02?sec.可惜的是,只有mysql?4.1.*以上才支持這樣的子查詢.?
MYSQL入門
下面是其它網(wǎng)友的補(bǔ)充:MYSQL入門
select id from? zhyx_items?? order by rand()? 這樣效率太低了MYSQL入門
優(yōu)化sql語句之后:MYSQL入門
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數(shù)據(jù)庫MySQL取出隨機(jī)數(shù)據(jù)》是否對您有啟發(fā),歡迎查看更多與《MYSQL數(shù)據(jù)庫MySQL取出隨機(jī)數(shù)據(jù)》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/14147.html