從MySQL數(shù)據(jù)庫表中取出隨機(jī)數(shù)據(jù)的代碼
MySQL 如何從表中取出隨機(jī)數(shù)據(jù)
以前在群里討論過這個問題,比較的有意思.mysql的語法真好玩.
他們原來都想用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,得到如下代碼
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ù)庫連接就不寫在這里面了 $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種方法和性能對比
- MySQL的指定范圍隨機(jī)數(shù)函數(shù)rand()的使用技巧
- mysql獲取隨機(jī)數(shù)據(jù)的方法
- mysql優(yōu)化取隨機(jī)數(shù)據(jù)慢的方法
- mysql 某字段插入隨機(jī)數(shù)(插入隨機(jī)數(shù)到MySQL數(shù)據(jù)庫)
- 詳解MySQL中concat函數(shù)的用法(連接字符串)
- Python連接MySQL并使用fetchall()方法過濾特殊字符
- sqlserver、mysql獲取連接字符串步驟
- PHP 設(shè)置MySQL連接字符集的方法
- MySQL產(chǎn)生隨機(jī)數(shù)并連接字符串的方法示例
相關(guān)文章
php+mysqli預(yù)處理技術(shù)實現(xiàn)添加、修改及刪除多條數(shù)據(jù)的方法
這篇文章主要介紹了php+mysqli預(yù)處理技術(shù)實現(xiàn)添加、修改及刪除多條數(shù)據(jù)的方法,實例分析了mysqli實現(xiàn)預(yù)處理的原理及使用技巧,可有效提高程序運(yùn)行效率,非常具有實用價值,需要的朋友可以參考下2015-01-01php數(shù)據(jù)庫中將base64圖片數(shù)據(jù)轉(zhuǎn)化為可訪問src的方法詳解
后端同學(xué)在對一些老項目進(jìn)行二次開發(fā)時候,可能會遇到一些小的圖片以base64的方式存儲在數(shù)據(jù)庫中的情況,這樣做的好處是這些圖片數(shù)據(jù)一般不會因為項目重新部署而丟失,但是這么做也會存在一些壞處,本文給大家介紹了php數(shù)據(jù)庫中base64圖片數(shù)據(jù)轉(zhuǎn)化可訪問的src的方法2023-10-10php實現(xiàn)保存submit內(nèi)容之后禁止刷新
這篇文章主要介紹了php保存submit內(nèi)容之后禁止刷新的具體實現(xiàn),需要的朋友可以參考下2014-03-03thinkphp中的多表關(guān)聯(lián)查詢的實例詳解
這篇文章主要介紹了thinkphp中的多表關(guān)聯(lián)查詢的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10PHP同時連接多個mysql數(shù)據(jù)庫示例代碼
這篇文章主要介紹了PHP同時連接多個mysql數(shù)據(jù)庫的具體實現(xiàn),需要的朋友可以參考下2014-03-03PHP實現(xiàn)的數(shù)組和XML文件相互轉(zhuǎn)換功能示例
這篇文章主要介紹了PHP實現(xiàn)的數(shù)組和XML文件相互轉(zhuǎn)換功能,結(jié)合實例形式分析了php針對xml格式數(shù)據(jù)與數(shù)組相互轉(zhuǎn)換操作技巧,需要的朋友可以參考下2018-03-03表單提交錯誤后返回內(nèi)容消失問題的解決方法(PHP網(wǎng)站)
這篇文章主要介紹了表單提交錯誤后返回內(nèi)容消失問題的解決方法,需要的朋友可以參考下2015-10-10