如何从表中选择最后一条记录(即具有 MAX(id)
的记录)?
下一个语句可以正常工作,但是选择第一条记录:
$statistics = SystemStatisticsHistory::findOne(1);
id
模型,您可以应用反向排序并将限制设置为1。SystemStatisticsHistory::find()->orderBy(['id' => SORT_DESC])->one();
另一种选择是使用类似于以下方式的子查询和 max
:
SystemStatisticsHistory::find()
->where(['id' => SystemStatisticsHistory::find()->max('id')])
->one();
使用最后一个选项有一些细微差别,可以查看这个问题。
您可以在此处查看max()
的文档。
我个人更喜欢使用第一个变量。
要获取第一条记录,只需在第一个查询中将排序方向更改为SORT_ASC
,并将第二个查询中的max()
更改为min()
。
P.S.硬编码的id
是不好的实践。
优化版
SystemStatisticsHistory::find()->select(['id'=>'MAX(`id`)'])->one()->id;
或者如果你想要增加一个数字
SystemStatisticsHistory::find()->select(['id'=>'( MAX(`id`)+ 1) '])->one()->id;