A partir de la respuesta dado por @chaos, pero con algunas modificaciones:
-
Siempre debes usar
ORDER BY
si usaLIMIT
. No hay un orden implícito garantizado para una tabla RDBMS. Es posible que normalmente obtiene filas en el orden de la clave principal, pero no puede confiar en esto, ni es portátil. -
Si ordena por orden descendente, no necesita saber el número de filas en la tabla de antemano.
-
Debe proporcionar un nombre de correlación (también conocido como alias de tabla) a una tabla derivada.
Esta es mi versión de la consulta:
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;