当前位置 博文首页 > tongtongsong的博客:Laravel获取随机几条数据(常用、高效率)
?
有时候我们常常会需要从数据库随机获取数据,比如:猜你喜欢,随机从数据库中随机几条数据;这样我们就需要随机从数据库获取数据。
我们先来看看Laravel自带的随机数据获取方法
一、使用原生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();?
?
转载:http://www.bcty365.com/content-153-6155-1.html#div_com
?
cs