Mysql Yii2首先是OrderBy特定字段值

Mysql Yii2首先是OrderBy特定字段值,mysql,yii2,Mysql,Yii2,这是我的桌子: Product id | name 1 | A 2 | B 3 | C 4 | D 我想让ID 3在第一个位置: Product id | name 3 | C 1 | A 2 | B 4 | D 我只能使用“OrderBy”指定ASC和DESC值。如果您指定了一个数值,则会出现错误。使用yii\db\Expression: ->OrderBy("FIELD(id,3,4,2,1)"); $orderBy = (new \yii\db\Query())

这是我的桌子:

Product
id | name
1 | A
2 | B
3 | C
4 | D
我想让ID 3在第一个位置:

Product
id | name
3 | C
1 | A
2 | B
4 | D

我只能使用“OrderBy”指定ASC和DESC值。如果您指定了一个数值,则会出现错误。

使用
yii\db\Expression

->OrderBy("FIELD(id,3,4,2,1)");
$orderBy = (new \yii\db\Query())
         ->select('*')
         ->from('product')
         ->orderBy([new \yii\db\Expression('FIELD (id, 3,1,2,4)')])
         ->all();

您可以将所有订单条件推送到数组中,然后将此数组放入orderBy方法,如上面所述ta=枚举类型字段。

$orderBy[] =  new \yii\db\Expression("ta = 'MALE' desc, ta = 'ALL' desc");
$orderBy[] =  new \yii\db\Expression("id asc, name desc");
$query->orderBy($orderBy);

如果您想了解如何使用Yii2对字段进行排序,请尝试以下方法

$array_ids = [5,7,3,9,2,8,1] //simple array

$modelsObj = Model::find()
        ->where(['id' => $array_ids]) // find only needed id's
        ->limit(5) //add limit if you need
        ->orderBy([new \yii\db\Expression('FIELD(id, '. implode(',', $array_ids) . ')')]) // sorting them as in array
        ->all();

也可以通过列的内部值(而不仅仅是id)进行排序。这在更新时很有用。您更新的值必须位于表的底部,因此:

->orderBy([new Expression('FIELD (column_name, value)ASC')])->all();

我不确定我是否理解你的问题。是否要选择此表中的行并按第二个示例中的顺序排列?在这种情况下,“订购”标准是什么?为什么第[3,C]行应该是第一行?但是Yii2->orderBy([new\yii\db\Expression('FIELD(id,3)DESC'),'id'=>SORT\u ASC])
->orderBy([new Expression('FIELD (column_name, value)ASC')])->all();