<p>Laravel自带的随机数据获取方法</p><p>一、使用原生SQL从数据库获取数据</p><p>从Mysql官网可以看到,可以让ORDER BY RAND()和LIMIT一起使用,可以用于从多行结果中选取随机的一部分。</p><p>SELECT * FROM table WHERE name="" ORDER BY RAND() LIMIT 100;</p><p>那么在laravel中使用原生SQL也很简单,如下所示:</p><p>$info = DB::select('SELECT * FROM table WHERE name="" ORDER BY RAND() LIMIT 100');</p><p>二、使用原始表达式从数据随机获取数据</p><p>我们都知道laravel的原始表达式,我们可以使用DB::raw('RAND()')从数据库随机获取数据。同时你还可以使用orderByRaw('RAND()')从数据库随机获取数据,和DB::raw('RAND()')效果一样</p><pre class="brush:php;toolbar:false">$info=self::where('orders','<>','')
->orderBy(DB::raw('RAND()'))
->take(5)
->get();</pre><p>三、使用laravel的inRandomOrder方法随机获取数据</p><p>laravel中使inRandomOrder会对数据结果进行随机排序,达到我们随机从数据库获取数据的效果:</p><pre class="brush:php;toolbar:false">$info=DB::table('users')
->inRandomOrder()
->take(5)
->get();</pre><p>上面三种对于小数据没有问题,对于大数据,性能就不行了</p><p>最高效的查询方法</p><pre class="brush:php;toolbar:false">$data=Hexiao::when($live,function($query){
$query->join(
DB::raw("(SELECTROUND(RAND()*((SELECTMAX(id)FROM`hexiao`)-(SELECTMIN(id)FROM`hexiao`))+(SELECTMIN(id)FROM`hexiao`))ASxid)ast2"),
'hexiao.id','>=','t2.xid'
);
});
->take(3)->get();</pre>