转载来源:https://www.yiichina.com/question/2276?sort=desc
mysql查询怎么随机获取数据? [ 2.0 版本 ]
lzrqyc110
2016-09-27 11:30:36
3315次浏览
3条回答
0
悬赏 30 金钱
用Yii框架模型怎么写随机获取数据?不是用sql语句,求帮忙,
/*
* 随机获取10道题
*/
public function getRandquestions(){
return $this->find()->offset(0)->limit(10)->asArray()->all();
}
共 3 个回答
默认排序
最后回答
Davis_Pen
Davis_Pen 回答于 2018-05-04 11:34
举报
User::find()->asArray()->orderBy('RAND()')->all();
回复
0 0
kokocool
kokocool 回答于 2016-09-27 14:32
举报
上述方法,第一种效率最低,第三种最好。
回复
0 0
kokocool
kokocool 回答于 2016-09-27 14:32
举报
1) 采用官方的方式
select * from tb_name order by rand() limit N
2)采用类似偏移方式
select * from tb_name
where id >= (select floor(max(id) * rand()) from tb_name )
order by id asc limit N;
3)优化的方式
select *
from tb_name as r1 join
(select round(rand() *
(select max(id)
from tb_name)) as id2)
as r2
where r1.id >= r2.id2
order by r1.id asc
limit N;
共 2 条回复
lzrqyc110
lzrqyc110 回复于 2016-09-28 14:07
回复
那请问怎么以model查询生成器的方式完成上面sql语句的效果呢?比如
$this->find()->offset(0)->limit(10)->asArray()->all();
这种方式
zone_g@163.com
zone_g@163.com 回复于 2019-04-28 21:22
回复
@lzrqyc110
`$query = HappyBank::find();
$query->alias('r1');
$query->join('JOIN', "(SELECT ROUND(RAND() * (". HappyBank::find()->select('MAX(id)')->createCommand()->getRawSql() .")) AS id2) AS r2");
$query->where("r1.id >= r2.id2");
$query->orderBy([
'r1.id' => SORT_ASC
]);
// var_dump($query->createCommand()->getRawSql());
var_dump($query->all());`
不知道你还用不用得上
kokocool , naivefang 觉得很赞
回复