或許你已經看過很多博主寫的文章,要不就是抄襲,要不就是給你一個下面的陳述句,隨機是隨機了,但是多來兩頁,你會發現前面出現的資料在第三頁甚至第二頁就出現了
select * from table order by rand()
這是因為rand()機制的問題,他每次都會打亂資料給你,然后你去取的時候0-10,11-20都有可能是同一個資料,為了解決這個問題,我翻遍了百度終于找到一種MD5加密演算法,比如我是商城商品隨機推薦
第一步:先把id加密生成一個新的key,然后再做key字串截取的排序 ORDER BY substr(key,start,len)
SELECT *, md5(id) as key FROM ims_cjdc_jfgoods ORDER BY substr(key,3,6) LIMIT 0,10
我們第一步已經把id做了加密,生成了一個新的key,第二步要和前端進行聯動了,因為單純的sql是解決不了這個問題的,第二步就是把每個用戶的第一次請求生成一個0~32之間的亂數
# 第一次請求的key,不要存快取,回傳給前端讓他自己存起來 $keystart = I('key'); if(!$keystart) { $keystart = rand(0,32); }
第三步,根據第二步生成的亂數形成固定的演算法,把$keystart帶入第一步的sql里面執行,直至用戶離開頁面為止,
目前我測驗了幾十萬的資料,屢試不爽,原理就是每個用戶的第一次請求都給他生成一個固定的演算法回傳給前端,前端在這個頁面內把這個演算法一直回傳回來直至用戶離開頁面為止,待下次用戶進來又給他一個新的演算法重復使用即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/553893.html
標籤:MySQL
下一篇:返回列表
