在表中选择最后一条记录。

14

如何从表中选择最后一条记录(即具有 MAX(id) 的记录)?
下一个语句可以正常工作,但是选择第一条记录:

$statistics = SystemStatisticsHistory::findOne(1); 
2个回答

30
为获取最大的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是不好的实践。


1
很高兴能够帮助。在这种情况下,请将答案标记为已接受。 - arogachev

0

优化版

SystemStatisticsHistory::find()->select(['id'=>'MAX(`id`)'])->one()->id;

或者如果你想要增加一个数字

SystemStatisticsHistory::find()->select(['id'=>'( MAX(`id`)+ 1) '])->one()->id;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接