在yii2中按rand()排序

时间:2015-11-17 00:05:13

标签: mysql yii2 yii2-advanced-app yii2-basic-app

大家好我很困惑一件事

我想在yii2中编写以下查询,但我无法获得预期的输出

SELECT * FROM user where category_id=5 ORDER BY rand() LIMIT 4

为此我做了以下

$data= User::find()->where(['category_id'=> 5])->orderBy(['rand()'])->limit(4);

但它会生成如下命令

SELECT * FROM `user` WHERE `category_id`=5 ORDER BY `0` LIMIT 4

哪个不是有效的mysql语句,那么我应该怎样做才能使查询正确?

我的目标是从user表中获取任意随机4条记录。

2 个答案:

答案 0 :(得分:21)

将其包装到yii\db\Expression以防止转义并删除数组部分:

use yii\db\Expression;

...

$query = User::find()
    ->where(['category_id' => 5])
    ->orderBy(new Expression('rand()'))
    ->limit(4);

答案 1 :(得分:4)

我不是yii2查询构建器的专家,但是,指定顺序应该有帮助

int k = 1;
  for(i = 1; i <= l; i++)
     for(j = 1; j <= c; j++)
         v[k++]=m[i][j];