À partir de la réponse donné par @chaos, mais avec quelques modifications :
-
Vous devez toujours utiliser
ORDER BY
si vous utilisezLIMIT
. Il n'y a pas d'ordre implicite garanti pour une table RDBMS. Vous pouvez habituellement obtenir des lignes dans l'ordre de la clé primaire, mais vous ne pouvez pas vous y fier, et ce n'est pas non plus portable. -
Si vous triez par dans l'ordre décroissant, vous n'avez pas besoin de connaître au préalable le nombre de lignes du tableau.
-
Vous devez donner un nom de corrélation (aka alias de table) à une table dérivée.
Voici ma version de la requête :
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;