web-dev-qa-db-ja.com

テーブルの最後のレコードを選択します

テーブルから最後のレコード(つまり、MAX(id)を持つ)を選択するにはどうすればよいですか?
次のステートメントは正常に機能しますが、最初のレコードを選択します。

$statistics = SystemStatisticsHistory::findOne(1); 
11
MaksimK

Max idのモデルを取得するには、逆の順序を適用して1つに制限します。

_SystemStatisticsHistory::find()->orderBy(['id' => SORT_DESC])->one();
_

別のオプションは、次のようにmaxで副選択を使用することです。

_SystemStatisticsHistory::find()
    ->where(['id' => SystemStatisticsHistory::find()->max('id')])
    ->one();
_

最後のオプションを使用していくつかのニュアンスがあります、チェック この質問

max()here のドキュメントを確認できます。

私は個人的に最初のバリエーションを使用することを好みます。

最初のレコードを取得するには、最初のクエリで順序の方向を_SORT_ASC_に変更し、2番目のクエリでmax()min()に変更します。

P.S。ハードコードされたidは悪い習慣です。

24
arogachev

最適化されたもの

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

または、数を増やしたい場合

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