分段截取替代 mysql rand()

需要随机从数据拿去几条数据

select * from  `tb` ORDER BY rand () limit  10

非常耗时

所以采用分段获取

$count =  DB::table('tb')->count();
$limit = 10;
$offset = rand(0, $count - $limit);
if ($offset > $count-$limit) {
   $offset = 0;
}
$data=DB::table('tb')->limit($limit)->offset($offset)->get();

但是 这样拿取的数据id是分段的 ,是有规律的。
所以数据库表新增一个随机数据字段rand_value,新增的时候给他一个随机数据
查询改成

$data=DB::table('tb')->limit($limit)->orderBy('rand_value')->offset($offset)->get();

这样就好了

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!