项目应用1——按页码生成随机排序【每页元素固定不变】
步骤:
统计数据总页数(按照指定分页数,统计总页数)
使用随机整数生成方法,生成可用的页码数据 https://www.cnblogs.com/sien6/p/13915254.html
unique_rand(最小页码, 最大页码, 生成总数)
使用redis或其他缓存工具,保存该随机数列【项目中保存两份相同数列,可进行进一步的功能设计】
让后使用array_pop()函数,进行随机取数【该数组中的数字代表随机取得的页码数】
===》随机生成页码数,根据页码数获取随机数据
项目应用2——按分页及元素混排方式随机输出【页码及元素随机输出】
步骤:
取出页码随机数,按照应用1 的方式生成随机也
同样统计每页元素并生成随机数,可以采用数据连接函数array_combine()合并数组,然后顺序输出数组即可
===》完全随机数据展现【可实现数据每5分钟轮换随机数】
最后附上网友实现的随机数功能:
使用原生SQL从数据库获取数据 从Mysql官网可以看到,可以让ORDER BY RAND()和LIMIT一起使用,可以用于从多行结果中选取随机的一部分。 SELECT * FROM table WHERE name="" ORDER BY RAND() LIMIT 100; 那么在laravel中使用原生SQL也很简单,如下所示: $info = DB::select('SELECT * FROM table WHERE name="" ORDER BY RAND() LIMIT 100');
使用原始表达式从数据随机获取数据 我们都知道laravel的原始表达式,我们可以使用DB::raw('RAND()')从数据库随机获取数据。同时你还可以使用orderByRaw('RAND()')从数据库随机获取数据,和DB::raw('RAND()')效果一样 $info=self::where('dealing','<>','') ->orderBy(DB::raw('RAND()')) ->take(5) ->get();
使用laravel的inRandomOrder方法随机获取数据 laravel中使inRandomOrder会对数据结果进行随机排序,达到我们随机从数据库获取数据的效果: $info = DB::table('users') ->inRandomOrder() ->take(5) ->get();
注:上面三种对于小数据没有问题,对于大数据,性能就不行了 最高效的查询方法【这个方法有点一直半解释,希望大神给予解析说明,谢谢!】 $data =Xiaoke::when($live,function ($query){ $query->join( DB::raw("(SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `xiaokes`)-(SELECT MIN(id) FROM `xiaokes`))+(SELECT MIN(id) FROM `xiaokes`)) AS xid) as t2"), 'xiaokes.id', '>=', 't2.xid' ); }); ->take(3)->get();
参考:
https://blog.csdn.net/tongtongsong/article/details/88050222