ホームページ >データベース >mysql チュートリアル >データ操作にもかかわらず、MySQL から最後の N 行を昇順で取得するにはどうすればよいですか?

データ操作にもかかわらず、MySQL から最後の N 行を昇順で取得するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-27 09:15:10556ブラウズ

How to Retrieve the Last N Rows in Ascending Order from MySQL Despite Data Manipulation?

操作されたデータを使用して MySQL の最後の N 行を昇順で取得する

MySQL データベースから最後の N 行を選択するのは一般的な操作です。ただし、データを操作する場合、行を返す順序の指定は難しい場合があります。

次のシナリオを考えてみましょう。以下に基づいて、「table」という名前のテーブルから最後の 50 行を選択したいとします。列「id」、これが主キーです。 「id」による昇順で行を並べ替えることは必須の要件です。

失敗した試行

次のクエリは結果を降順で並べ替えようとしますが、失敗します。最後の 50 行を返す:

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

あるいは、このクエリは次のことを試みます。 "id" 値を最大の "id" 値から 50 を引いた値と比較することで最後の 50 行を識別しますが、行が削除されている場合は機能しません:

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

解決策

この問題に対処するには、サブクエリを使用して目的の結果を達成できます。 result:

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

このクエリは最初にサブクエリを実行し、「table」から最後の 50 行を選択し、降順に並べます。結果のサブクエリには「sub」というエイリアスが付けられます。

最後に、外側のクエリは「sub」サブクエリからすべての行を選択し、昇順に並べます。これにより、テーブルから最後の 50 行が効率的に取得され、「id」列に基づいて昇順で並べ替えられるようになり、行が操作された可能性がある場合に対処できます。

以上がデータ操作にもかかわらず、MySQL から最後の N 行を昇順で取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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