Mulai dari jawaban diberikan oleh @chaos, tetapi dengan sedikit modifikasi:
-
Anda harus selalu menggunakan
ORDER BYjika Anda menggunakanLIMIT. Tidak ada urutan implisit yang dijamin untuk tabel RDBMS. Anda mungkin biasanya dapatkan baris dalam urutan kunci utama, tetapi Anda tidak dapat mengandalkan ini, juga tidak portabel. -
Jika Anda memesan dalam urutan menurun, Anda tidak perlu mengetahui jumlah baris dalam tabel terlebih dahulu.
-
Anda harus memberikan nama korelasi (alias tabel alias) ke tabel turunan.
Ini versi kueri saya:
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;