yii2:如何使用mysql在find()的orderby()中最后添加两个字段和null

vptzau2j  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(448)

尝试做一些类似于这个问题的事情,但是需要对mysql最后一个空值进行排序
有点像。。。

$query->MODEL_NAME::find(); 
$query->orderBy(['column_1' => 'IS NULL','column_1'=> SORT_DESC]);

虽然这个语法是错误的。谢谢!
当我尝试的时候 orderBy('column_1 IS NULL ASC, column_1 desc') 我得到了错误
sqlstate[42s22]:找不到列:1054未知列。正在执行的sql是: SELECT * FROM 'table' ORDER BY 'due_date IS NULL' 注意:在上面的错误中必须用单引号替换反勾号才能显示在这里。

2skhul33

2skhul331#

使用 \yii\db\Expression ```
MODEL::find()
->where('1')
->orderBy(
[
new \yii\db\Expression('col_1 IS NULL ASC, col_1 desc')
]
)
->all();

x7rlezfr

x7rlezfr2#

按升序排序,最后为空

使用减号运算符:

在mysql中,空值的顺序被认为比任何非空值都低,除非排序时在列名之前添加了-(减号)字符。
查询:

SELECT * FROM table     
ORDER BY -date_login DESC

使用yii框架

Model::find()->orderBy([new \yii\db\Expression('-column_1 DESC')])->all();

使用is null比较运算符:

我们可以信赖的事实是,是空的回报 1 当表达式 NULL ,和 0 否则。有了这些信息,我们可以这样做:

SELECT * FROM table     
ORDER BY column1 IS NULL, column1 ASC

使用yii框架

Model::find()->orderBy([new \yii\db\Expression('column_1 IS NULL, column1 ASC')])->all();

使用合并函数

这个 COALESCE 函数,它返回指定参数列表中的第一个非空值(或 NULL 如果没有非空值)。因此,要排序 NULL 最后,在按升序排序非空值时,我们可以简单地提供可能的最高值作为 NULL 价值观。
查询

SELECT * FROM table 
ORDER BY COALESCE(name, 'zz') ASC

这是因为zee是字母表中的最后一个字母,默认情况下,mysql会先对符号和数字排序,然后再对字母表排序。因此,用字母zee的最高可能序列替换空值会将空值推到列表的底部。
使用yii框架

Model::find()->orderBy([new \yii\db\Expression("COALESCE(name, 'zz') ASC")])->all();

请参阅此处了解更多详细信息

相关问题