项目应用——数据展示生成随机排序

项目应用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

原文地址:https://www.cnblogs.com/sien6/p/13917222.html