yii2 case find_in_set when 1 else 0 end 排序
时间: 2024-06-07 22:12:03 浏览: 101
在 Yii2 中使用 `find_in_set` 函数进行排序可以使用以下代码:
```php
$query = MyModel::find()
->orderBy([
"find_in_set($value, column_name) DESC",
"other_column_name ASC",
]);
```
其中,`$value` 是需要查找的值,`column_name` 是需要在其中查找 `$value` 的字段名。`find_in_set` 函数会返回 `$value` 在 `column_name` 中的位置,如果不存在则返回 0。因此,我们可以使用 `find_in_set` 函数进行倒序排序,这样在 `column_name` 中存在 `$value` 的记录会排在前面。
如果需要在 `$value` 不存在于 `column_name` 中的记录中,将这些记录排在前面,可以使用 `when` 函数进行判断,代码如下:
```php
$query = MyModel::find()
->orderBy([
"(case when find_in_set($value, column_name) then 1 else 0 end) DESC",
"other_column_name ASC",
]);
```
这样,`find_in_set` 函数返回 0 的记录会被当作 `false`,返回非 0 的记录会被当作 `true`。通过 `when` 函数进行判断,如果返回 `true`,则会按照逆序排序,否则按照正序排序。
阅读全文