yii,mysql查询怎么随机获取数据?

10 篇文章 1 订阅

转载来源: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 觉得很赞
 回复
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值