Mysql Yii2自然分选

Mysql Yii2自然分选,mysql,yii2,Mysql,Yii2,我一直在挠头,我一辈子都不知道该怎么做 我需要一个VARCHAR文件,以便能够在gridview中使用自然排序(即按顺序排列的数字)进行排序 SELECT * FROM test ORDER BY `number`; 这是该系统目前的工作方式。我会把这个拿出来吗 # id, number 1, 1 206, 10 97, 100 98, 102 99, 103 103, 104 104, 105 105, 106 106, 107 107, 108 108, 109 10, 11 109,

我一直在挠头,我一辈子都不知道该怎么做

我需要一个VARCHAR文件,以便能够在gridview中使用自然排序(即按顺序排列的数字)进行排序

SELECT * FROM test ORDER BY `number`; 
这是该系统目前的工作方式。我会把这个拿出来吗

# id, number
1, 1
206, 10
97, 100
98, 102
99, 103
103, 104
104, 105
105, 106
106, 107
107, 108
108, 109
10, 11
109, 110
110, 111
111, 112
在MySQL中,如果我想要自然排序,那么我可以编写这个

SELECT * FROM test ORDER BY `number`+0;
然后我得到

# id, number
1, 1
2, 2
3, 3
4, 4
5, 5
6, 6
7, 7
8, 8
9, 9
206, 10
10, 11
11, 12
12, 13
所以这个数字是正确的

我如何在Yii2中实现这一点

问候

利亚姆

根据下面的答案,我可以在搜索模型中使用以下内容

    $dataProvider->sort->attributes['number'] = 
    [
        'asc' => ['LENGTH(number)' => SORT_ASC, 'number'=>SORT_ASC],
        'desc' => ['LENGTH(number)' => SORT_DESC, 'number'=>SORT_DESC],
    ];

在DataProvider配置中试试这个(我不确定是否可以传递MySQL函数而不是简单的列名)


通常情况下,首先检查长度,然后检查值,这样可以获得natsort效果。

我很快就会尝试,非常感谢
// ...
'sort' => [
    'defaultOrder' => [
        'LENGTH(number)' => SORT_ASC,
        'number' => SORT_ASC,
    ],
],