ホームページ >データベース >mysql チュートリアル >MySQL テーブルから最後の N 行を昇順で確実に選択する方法

MySQL テーブルから最後の N 行を昇順で確実に選択する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-04 02:29:12541ブラウズ

How to Reliably Select the Last N Rows in Ascending Order from a MySQL Table?

MySQL からの最後の N 行の選択

MySQL データベースからの最後の N 行の選択は、さまざまな方法を使用する簡単なタスクです。ただし、昇順でソートされた主キー列を扱う場合、従来のアプローチでは制限が発生する可能性があります。この記事は、テーブル内のレコードの操作と削除を可能にする、この問題に対する信頼できる解決策を提供することを目的としています。

問題:

本来の目的は、レコードを取得することです。主キー列 ID に基づいて昇順で並べ替えられたテーブルの最後の 50 行。ただし、最初の試みでは 2 つの弱点が浮き彫りになりました。

  1. ORDER BY id DESC を使用して行を降順に並べ替えると、LIMIT 50 を使用する場合に必要な ASC 順序を保持できません。
  2. クエリは次のものに依存します。最大 ID から固定値を減算します (例: id > (SELECT MAX(id) FROM chat) - 50)

解決策:

これらの課題を克服するために、より堅牢なアプローチでは、サブクエリ:

SELECT * FROM
(
 SELECT * FROM table ORDER BY id DESC LIMIT 50
) AS sub
ORDER BY id ASC;

説明:

  • サブクエリ ((SELECT * FROM table ORDER BY id DESC LIMIT 50)) は、降順を維持しながらテーブルの最後の 50 行。
  • 外側クエリ (SELECT * FROM ...) はサブクエリをラップし、新しい ORDER BY 句を導入します。これにより、以前の並べ替えがオーバーライドされ、ID に基づいて行が昇順に並べ替えられます。

このアプローチは効果的です。従来の方法で直面する制限に対処します。これにより、次のことが可能になります。

  • 操作や削除に関係なく、ASC 順で最後の N 行を取得します。
  • 行の追加や削除など、テーブルへの変更の処理クエリの精度には影響しません。

以上がMySQL テーブルから最後の N 行を昇順で確実に選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。