技术分享 Laravel高效率获取随机几条数据

patten · 2019-05-12 07:36:28 · 热度: 355

有时候我们常常会需要从数据库随机获取数据,比如:猜你喜欢,随机从数据库中随机几条数据;这样我们就需要随机从数据库获取数据。

我们先来看看 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();

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册