有时候我们常常会需要从数据库随机获取数据,比如:猜你喜欢,随机从数据库中随机几条数据;这样我们就需要随机从数据库获取数据。
我们先来看看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