A partir da resposta dado por @chaos, mas com algumas modificações:
-
Você deve sempre usarORDER BYse você usarLIMIT. Não há ordem implícita garantida para uma tabela RDBMS. Você pode geralmente obter linhas na ordem da chave primária, mas você não pode confiar nisso, nem é portátil.
-
Se você ordenar por ordem decrescente, não precisa saber o número de linhas na tabela de antemão.
-
Você deve fornecer um nome de correlação (também conhecido como alias de tabela) para uma tabela derivada.
Aqui está minha versão da consulta:
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;