或許你已經看過很多博主寫的文章,要不就是抄襲,要不就是給你一個下麵的語句,隨機是隨機了,但是多來兩頁,你會發現前面出現的數據在第三頁甚至第二頁就出現了 select * from table order by rand() 這是因為rand()機制的問題,他每次都會打亂數據給你,然後你去取的時候0- ...
或許你已經看過很多博主寫的文章,要不就是抄襲,要不就是給你一個下麵的語句,隨機是隨機了,但是多來兩頁,你會發現前面出現的數據在第三頁甚至第二頁就出現了
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裡面執行,直至用戶離開頁面為止。
目前我測試了幾十萬的數據,屢試不爽,原理就是每個用戶的第一次請求都給他生成一個固定的演算法返回給前端,前端在這個頁面內把這個演算法一直回傳回來直至用戶離開頁面為止,待下次用戶進來又給他一個新的演算法重覆使用即可