Mysql Php 推送获取随机数据解决分页重复问题
或许你已经看过很多博主写的文章,要不就是抄袭,要不就是给你一个下面的语句,随机是随机了,但是多来两页,你会发现前面出现的数据在第三页甚至第二页就出现了
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里面执行,直至用户离开页面为止。
目前我测试了几十万的数据,屡试不爽,原理就是每个用户的第一次请求都给他生成一个固定的算法返回给前端,前端在这个页面内把这个算法一直回传回来直至用户离开页面为止,待下次用户进来又给他一个新的算法重复使用即可