Zaczynając od odpowiedzi podane przez @chaos, ale z kilkoma modyfikacjami:
-
Zawsze powinieneś używać
ORDER BY
jeśli używaszLIMIT
. Nie ma gwarancji niejawnej kolejności dla tabeli RDBMS. Możesz zazwyczaj pobierz wiersze w kolejności klucza podstawowego, ale nie możesz na tym polegać, ani nie jest on przenośny. -
Jeśli uporządkujesz według w kolejności malejącej, nie musisz wcześniej znać liczby wierszy w tabeli.
-
Musisz podać nazwę korelacji (alias tabeli) do tabeli pochodnej.
Oto moja wersja zapytania:
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;