A partire dalla risposta data da @chaos, ma con alcune modifiche:
-
Dovresti sempre usare
ORDER BYse usiLIMIT. Non esiste un ordine implicito garantito per una tabella RDBMS. Puoi solitamente ottieni le righe nell'ordine della chiave primaria, ma non puoi fare affidamento su questo, né è portatile. -
Se ordini in ordine decrescente, non è necessario conoscere in anticipo il numero di righe nella tabella.
-
Devi fornire un nome di correlazione (alias tabella) in una tabella derivata.
Ecco la mia versione della query:
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;