高效快速不重複隨機讀取資料庫mysql資料方式

2021-10-20 20:55:46 字數 1019 閱讀 6161

很多**都有乙個隨便看看功能,常見的實現方式是通過資料庫的rand()函式來隨機排序實現獲取隨機的資料,但是效率不高,並且每次獲取的資料沒有關聯,會出現重複的資料。

如果業務上需要隨機讀取表中的資料,但是每次讀取的資料不能重複怎麼實現呢

我在網上找了一圈,沒有找到可行方案,最後自己想到了乙個方法

如果資料的主鍵id是uuid最好實現,或者資料中有稍微長一點點的字串字段

因為我的資料id的主鍵是uuid,查詢資料之前,通過random類計算出兩個隨機數,每次查詢資料庫都帶上這兩個隨機的數字,通過資料庫的sub函式擷取id的隨機範圍,通過這個id的子串排序實現隨機資料的讀取,並且每次讀取都不會得到重複的資料。

說的可能有點抽象,我舉個例子

比如我的資料庫中的資料有三條資料,它們的id分別是

id003c34f3648c4c8aaf8a8049fcc8d706

2bc9193f577b4b52a34bd85bf4307c11

55d4e5da10ad454e9f3ecf87d8f86b69

id字串總長是32,通過random類計算擷取id的哪部分,比如得到的開始位置是3,長度5,那麼查詢的語句就是   select * from *** order by substr(id,$,$) limit 0,10   

003c34f3648c4c8aaf8a8049fcc8d706

2bc9193f577b4b52a34bd85bf4307c11

55d4e5da10ad454e9f3ecf87d8f86b69

排序之後得的結果就是 2 1 3

下次再讀取可以重新計算擷取的部分,就會得到其他的順序,例如

003c34f3648c4c8aaf8a8049fcc8d706

2bc9193f577b4b52a34bd85bf4307c11

55d4e5da10ad454e9f3ecf87d8f86b69

如果沒有這種長的字串,數字也行,如果每個欄位的值都很短,也可以通過concat函式將多個列的值拼到一起再擷取排序。

end

php隨機不重複查詢mysql資料庫

文中的 就不替換了,直接貼上自己的了。result mysqli query select from blog order by rand limit 1 這個方法的話說是有問題,查詢大量資料效率低下,資料少問題不大 不過我這裡的資料也不多 所以又找到了乙個隨機id來查詢。result mysqli...

android 資料庫插入資料不重複

這個其實只要在資料庫建立的時候對欄位唯一約束就可以了,也有人說插入時對整個資料庫重複查詢,小點的資料庫可能還沒什麼問題,但是資料庫龐大的話就很耗時和記憶體了 string sql create table person id integer primary key autoincrement,nam...

asp生成不重複的隨機數,隨機取資料庫記錄

生成 k 個不重複的 小於max 的隨機數 dim k k 4max 10 dim b 生成的數儲存在陣列b 中 redim b k b 0 0 function check t,n check true for d 1 to n 1 if t b d then check false end if...