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