從MySQL數(shù)據(jù)庫(kù)表中取出隨機(jī)數(shù)據(jù)的代碼
MySQL 如何從表中取出隨機(jī)數(shù)據(jù)
以前在群里討論過(guò)這個(gè)問(wèn)題,比較的有意思.mysql的語(yǔ)法真好玩.
他們?cè)瓉?lái)都想用PHP的實(shí)現(xiàn)隨機(jī),但取出多條好像要進(jìn)行兩次以上查詢.
翻了手冊(cè),找到了下面這個(gè)語(yǔ)句,可以完成任務(wù)了
SELECT * FROM table_name ORDER BY rand() LIMIT 5;
rand在手冊(cè)里是這么說(shuō)的:
RAND()
RAND(N)
返回在范圍0到1.0內(nèi)的隨機(jī)浮點(diǎn)值。如果一個(gè)整數(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
你不能在一個(gè)ORDER BY子句用RAND()值使用列,因?yàn)镺RDER BY將重復(fù)計(jì)算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),這是有利于得到一個(gè)來(lái)自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的隨機(jī)樣本。注意在一個(gè)WHERE子句里的一個(gè)RAND()將在每次WHERE被執(zhí)行時(shí)重新評(píng)估。
但我試了一下,8千條記錄的表,執(zhí)行一次需要0.08 sec,.慢了些
后來(lái)請(qǐng)教了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;
執(zhí)行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持這樣的子查詢.
以下是php代碼:
<? //數(shù)據(jù)庫(kù)連接就不寫(xiě)在這里面了 $s = isset( $_GET['s'] )?$_GET['s']:0; $e = isset( $_GET['e'])?$_GET['e']:50; $count =85000; if( $s < $count ) { $sql = "select * from 表前綴_info where isget =0 order by id desc limit $s,$e "; $query = mysql_query( $sql ); while( $rs = mysql_fetch_array( $query ) ) { $id = $rs['id']; $sss = $rs['sss']; $typeid = $rs['typeid']; $isget = $rs['isget']; $sql = "insert into 表前綴_info_bak (id,表前綴,typeid,isget) values('$id','$sss','$typeid','$isget')"; mysql_query( $sql ) ; echo $sql; //exit; $sqlu = "update 表前綴_info set isget=1 where id =".$rs['id']; mysql_query( $sqlu ); } echo '<meta http-equiv="refresh" content="0;url=rand.php?s='.($s+50).'&e=50">正在處理數(shù)據(jù),當(dāng)前為'.$s.'條......'; } else { echo '完成所有數(shù)據(jù)處理 <a href=rand.php>再隨機(jī)排序一次</a>'; } ?>
- MySQL查詢隨機(jī)數(shù)據(jù)的4種方法和性能對(duì)比
- MySQL的指定范圍隨機(jī)數(shù)函數(shù)rand()的使用技巧
- mysql獲取隨機(jī)數(shù)據(jù)的方法
- mysql優(yōu)化取隨機(jī)數(shù)據(jù)慢的方法
- mysql 某字段插入隨機(jī)數(shù)(插入隨機(jī)數(shù)到MySQL數(shù)據(jù)庫(kù))
- 詳解MySQL中concat函數(shù)的用法(連接字符串)
- Python連接MySQL并使用fetchall()方法過(guò)濾特殊字符
- sqlserver、mysql獲取連接字符串步驟
- PHP 設(shè)置MySQL連接字符集的方法
- MySQL產(chǎn)生隨機(jī)數(shù)并連接字符串的方法示例
相關(guān)文章
php+mysqli預(yù)處理技術(shù)實(shí)現(xiàn)添加、修改及刪除多條數(shù)據(jù)的方法
這篇文章主要介紹了php+mysqli預(yù)處理技術(shù)實(shí)現(xiàn)添加、修改及刪除多條數(shù)據(jù)的方法,實(shí)例分析了mysqli實(shí)現(xiàn)預(yù)處理的原理及使用技巧,可有效提高程序運(yùn)行效率,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-01php數(shù)據(jù)庫(kù)中將base64圖片數(shù)據(jù)轉(zhuǎn)化為可訪問(wèn)src的方法詳解
后端同學(xué)在對(duì)一些老項(xiàng)目進(jìn)行二次開(kāi)發(fā)時(shí)候,可能會(huì)遇到一些小的圖片以base64的方式存儲(chǔ)在數(shù)據(jù)庫(kù)中的情況,這樣做的好處是這些圖片數(shù)據(jù)一般不會(huì)因?yàn)轫?xiàng)目重新部署而丟失,但是這么做也會(huì)存在一些壞處,本文給大家介紹了php數(shù)據(jù)庫(kù)中base64圖片數(shù)據(jù)轉(zhuǎn)化可訪問(wèn)的src的方法2023-10-10php實(shí)現(xiàn)保存submit內(nèi)容之后禁止刷新
這篇文章主要介紹了php保存submit內(nèi)容之后禁止刷新的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03thinkphp中的多表關(guān)聯(lián)查詢的實(shí)例詳解
這篇文章主要介紹了thinkphp中的多表關(guān)聯(lián)查詢的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10php設(shè)計(jì)模式 Builder(建造者模式)
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使用同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示2011-06-06php+ajax實(shí)時(shí)輸入自動(dòng)搜索匹配的方法
這篇文章主要介紹了php+ajax實(shí)時(shí)輸入自動(dòng)搜索匹配的方法,實(shí)例分析了兩種實(shí)現(xiàn)方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12PHP同時(shí)連接多個(gè)mysql數(shù)據(jù)庫(kù)示例代碼
這篇文章主要介紹了PHP同時(shí)連接多個(gè)mysql數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03PHP實(shí)現(xiàn)的數(shù)組和XML文件相互轉(zhuǎn)換功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的數(shù)組和XML文件相互轉(zhuǎn)換功能,結(jié)合實(shí)例形式分析了php針對(duì)xml格式數(shù)據(jù)與數(shù)組相互轉(zhuǎn)換操作技巧,需要的朋友可以參考下2018-03-03表單提交錯(cuò)誤后返回內(nèi)容消失問(wèn)題的解決方法(PHP網(wǎng)站)
這篇文章主要介紹了表單提交錯(cuò)誤后返回內(nèi)容消失問(wèn)題的解決方法,需要的朋友可以參考下2015-10-10