mysql實現隨機查詢
1
|
SELECT * FROM ` table ` ORDER BY RAND()
limit 1 |
方法二:?
1
2
3
|
SELECT * FROM ` table ` WHERE id
>= ( SELECT floor(RAND()
* ( SELECT MAX (id) FROM ` table `))) ORDER BY id
LIMIT 1; |
?
1
|
SELECT floor(RAND()
* ( SELECT MAX (id) FROM ` table `)) |
1
|
WHERE id
>= ( SELECT floor(RAND()
* ( SELECT MAX (id) FROM ` table `))) |
然後最後就把大於這個隨機id的行查詢出來,然後按照id排序,選擇第一個,就相當與獲取了所有行中隨機的一行。
評價:有問題,如果id不是從0開始的話,比如從10000開始自增,那麼 SELECT floor(RAND() * (SELECT MAX(id) FROM `table`))
得到的將是會喲很大概率得到小於10000的值,經過where限定的查詢結果將會是所有的查詢結果的機率變大,最後limit 1獲取的是第一行資料的機率變高。
方法三:?
1
2
3
4
|
SELECT * FROM ` table ` WHERE id
>= ( SELECT floor(
RAND() * (( SELECT MAX (id) FROM ` table `)-( SELECT MIN (id) FROM ` table `))
+ (SELECTMIN(id) FROM ` table `))) ORDER BY id
LIMIT 1; |
1
2
3
4
5
6
7
8
|
SELECT * FROM ` table ` AS t1 JOIN ( SELECT ROUND(RAND()
* (( SELECT MAX (id) FROM ` table `)-( SELECT MIN (id) FROM ` table `))+ ( SELECT MIN (id) FROM ` table `)) AS id) AS t2 WHERE t1.id
>= t2.id ORDER BY t1.id
LIMIT 1; |
以上解決方案都預設有一個不重複的數字欄位,其實現在很多表的設計都是以一個自增段作為主鍵,當然還有一些是以uuid作為主鍵的,而沒有數字鍵,這樣的話,可以用mysql的函式將uuid的字串轉換成數字。而且還有一個問題,如果id欄位的數字分佈不均勻的話(比如按照1,4,5,6,7,8,45這樣分佈),也會造成隨機查詢的不合理,但是這裡就不討論那麼複雜的問題了。
二、隨機查詢多條資料
方法一:把隨機查詢一條資料的limit
1修改成limit 5
評價:這樣獲取的資料會是連續的。
方法二:?
1
2
3
4
5
|
SELECT * FROM ` table ` AS t1 JOIN ( SELECT ROUND(RAND()
* (( SELECT MAX (id) FROM ` table `)-( SELECT MIN (id) FROM ` table `))+( SELECT MIN (id) FROM ` table `)) AS id from ` table `
limit 50) AS t2 on t1.id=t2.id ORDER BY t1.id
LIMIT 1; |
1
|
SELECT ROUND(RAND()
* (( SELECT MAX (id) FROM ` table `)-( SELECT MIN (id) FROM ` table `))+( SELECT MIN (id) FROM ` table `)) AS id |
t1.id=t2.id會挑選出不大於50行的隨機資料,然後取5條就好了。
相關文章
- 如何實現MySQL隨機查詢資料與MySQL隨機更新資料?MySql隨機
- MySQL 隨機查詢資料與隨機更新資料實現程式碼MySql隨機
- mysql 隨機查詢記錄MySql隨機
- Access查詢實現Mysql的 limit 查詢MySqlMIT
- mysql多表查詢如何實現MySql
- MYSQL SQLServer分頁查詢的實現MySqlServer
- Mysql 實現樹狀遞迴查詢MySql遞迴
- MYSQL INNODB中hash查詢表的實現MySql
- Excel資料庫轉MySQL,實現查詢Excel資料庫MySql
- php實現mysql資料庫隨機重排例子PHPMySql資料庫隨機
- MySQL簡單實現多欄位模糊查詢MySql
- MySQL 查詢結果取交集的實現方法MySql
- oracle、my sql、sql隨機查詢語句OracleSQL隨機
- golang通過mysql語句實現分頁查詢GolangMySql
- golang透過mysql語句實現分頁查詢GolangMySql
- 實現隨機顏色隨機
- java實現折半查詢。Java
- 查詢演算法集:順序查詢、二分查詢、插值查詢、動態查詢(陣列實現、連結串列實現)演算法陣列
- MySQL查詢MySql
- MySQL實現樹狀所有子節點查詢的方法MySql
- C++實現查詢本機資訊並且上報C++
- 隨筆:MySQL 查詢事務狀態欄位說明MySql
- 工作隨筆——mysql子查詢刪除原表資料MySql
- Mysql 慢查詢優化實踐MySql優化
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- 運用JS 實現隨機點名 (隨機點名)JS隨機
- Swoole 實戰:MySQL 查詢器的實現(協程連線池版)MySql
- indexdb實現分頁查詢Index
- 折半查詢(C++實現)C++
- 【面經】面試官:如何以最高的效率從MySQL中隨機查詢一條記錄?面試MySql隨機
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- HBase高效能隨機查詢之道 – HFile原理解析隨機
- mysql 標量子查詢和現金盤程式製作非法子查詢MySql
- MySQL - 資料查詢 - 簡單查詢MySql
- MySQL聯結查詢和子查詢MySql
- [Mysql 查詢語句]——查詢欄位MySql
- 隨機高併發查詢結果一致性設計實踐隨機
- MySQL子查詢MySql