Pilih baris N terakhir dari MySQL

121

Saya ingin memilih 50 baris terakhir dari database MySQL dalam kolom bernama id yang merupakan kunci utama . Tujuannya adalah agar baris harus diurutkan berdasarkan id di ASC urutan , itulah mengapa query ini tidak berfungsi

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

Juga luar biasa bahwa baris dapat dimanipulasi (dihapus) dan itulah mengapa kueri berikut juga tidak berfungsi

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

Pertanyaan : Bagaimana mungkin mengambil N baris terakhir dari database MySQL yang dapat dimanipulasi dan dalam urutan ASC?

nanobash
sumber

Jawaban:

236

Anda dapat melakukannya dengan sub-kueri:

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

Ini akan memilih 50 baris terakhir dari table, dan kemudian mengurutkannya dalam urutan menaik.

perabot baru
sumber
5
^ FYI, saya tahu artikel ini tentang MySQL, tetapi ingin memberi tahu bahwa sebagai tanggapan atas komentar @ DiegoDD di atas, menghilangkan pilih dan alias eksternal tampaknya tidak berfungsi di Postgres (9.3.5). Saya mendapatkan pesan 'Kesalahan: beberapa klausa ORDER BY tidak diizinkan'. Jawaban yang diterima, bagaimanapun, berfungsi seperti yang diharapkan di Postgres
allenwlee
Terima kasih untuk ini! Kueri ini membantu saya memperbaiki masalah saya. Saya telah mencari ini selama berjam
Arshad
1
Bagaimana saya bisa menerapkan kueri ini dengan JOINS?
GYaN
@GYaN menambahkan bergabung di sub kueri bagian dalam
syekh hamza
9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

Jika Anda memiliki bidang tanggal yang menyimpan tanggal (dan waktu) di mana obrolan dikirim atau bidang apa pun yang diisi secara bertahap (diurutkan menurut DESC) atau secara desinscrementally (diurutkan menurut ASC) data per baris, letakkan sebagai kolom kedua di yang mana datanya harus dipesan.

Itulah yang berhasil untuk saya !!!! semoga membantu !!!!

bantuan
sumber
7
SELECT * FROM table ORDER BY id DESC LIMIT 50

menghemat sumber daya membuat satu kueri, tidak perlu membuat kueri bersarang

Berdengung
sumber
1
Kueri Anda akan mengembalikan hasil secara terbalik (menurun id). Kueri @ newfurniturey akan mendapatkan baris TERAKHIR yang disisipkan ( LIMITpada id menurun), dan hasil akhirnya akan memiliki id yang naik.
Robin Kanters
1
Solusi Anda tidak akan mendapatkan hasil dalam urutan yang benar, melainkan akan membuatnya berbalik sehingga perlu urutan lain untuk membuatnya dalam urutan yang benar lagi
Cobra47
1
Tapi kemudian Anda hanya melakukan php array_reverse () atau apa pun yang setara dalam bahasa scripting pilihan Anda. Database tidak perlu melakukan pekerjaan itu.
Joe
6
@Joe Tidak ada dalam pertanyaan yang menunjukkan bahwa bahasa skrip sedang digunakan, jadi itu bukan asumsi yang aman untuk dibuat.
Nick Coons
Jawaban yang diharapkan seharusnya sudah diurutkan hanya dengan menggunakan kueri database.
d4ryl3
-2
select * from Table ORDER BY id LIMIT 30

Catatan: * idharus unik. * Anda dapat mengontrol jumlah baris yang dikembalikan dengan mengganti 30dalam kueri

Darshan
sumber
1
Bisakah Anda menjelaskan solusi Anda? Penjelasan dalam tanda kurung tampaknya merupakan kode, letakkan seluruh kalimat di atas / di bawah kode Anda. Terima kasih
deHaar