MySQLから最後のN行を選択


121

私は、指定したカラム内のMySQLデータベースからの最後の50行を選択したいのIDである主キー。目的は、行をIDASC順にソートすることです。そのため、このクエリは機能しません。

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

また、行が操作(削除)される可能性があることも注目に値します。そのため、次のクエリも機能しません。

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

質問:操作してASC順序にできるMySQLデータベースから最後のN行を取得するにはどうすればよいですか?

回答:


236

あなたはサブクエリでそれを行うことができます:

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

これにより、から最後の 50行が選択さtableれ、昇順で並べ替えられます。


5
^参考までに、この記事はMySQLに関するものですが、上記の@DiegoDDのコメントに対応して、外部選択とエイリアスを省略してもPostgres(9.3.5)では機能しないようです。「エラー:複数のORDER BY句は許可されていません」というメッセージが表示されます。ただし、受け入れられた回答はPostgresで期待どおりに機能します
allenwlee 14年

これをありがとう!このクエリは、問題を解決するのに役立ちました。私はこれを何時間も探していました
Arshad

1
JOINSでこのクエリを適用するにはどうすればよいですか?
GYaN 2017年

@GYaNは内部サブクエリに結合を追加します
シェイクハムザ

9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

チャットが送信された日付(および時刻)を格納している日付フィールドがある場合、または行ごとにインクリメンタル(DESC順に並べ替え)またはデスインクリメンタル(ASC順に並べ替え)データが入力されているフィールドは、2番目の列として配置します。どのデータを注文するか。

それは私のために働いたものです!!!! お役に立てば幸いです!!!!


7
SELECT * FROM table ORDER BY id DESC LIMIT 50

リソースを保存して1つのクエリを作成します。ネストされたクエリを作成する必要はありません。


1
クエリは結果を逆(IDの降順)で返します。@newfurnitureyのクエリは、最後に挿入された行(LIMITIDが降順)を取得し、最終結果はIDが昇順になります。
ロビンカンタース2015年

1
あなたの解決策は正しい順序で結果を得るのではなく、それらを逆にするので、もう一度正しい順序でそれらを得るための別の順序の必要性
Cobra47

1
ただし、php array_reverse()または選択したスクリプト言語で同等のものを実行するだけです。データベースはその作業を行う必要はありません。
Joe

6
@Joe質問にはスクリプト言語が使用されていることを示すものは何もないので、安全な仮定ではありません。
Nick Coons

予想される回答は、データベースクエリのみを使用して既に並べ替えられているはずです。
d4ryl3

-2
select * from Table ORDER BY id LIMIT 30

注:* idは一意である必要があります。* 30クエリのを置き換えることで、返される行数を制御できます


1
あなたの解決策を説明していただけませんか?括弧内の説明はコードのようです。コードの上/下に文全体を入れてください。ありがとう
deHaar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.