Från och med svaret ges av @kaos, men med några modifieringar:
-
Du bör alltid använda
ORDER BY
om du använderLIMIT
. Det finns ingen implicit ordning garanterad för en RDBMS-tabell. Du kan vanligtvis hämta rader i ordningen för primärnyckeln, men du kan inte lita på detta, och det är inte heller bärbart. -
Om du beställer efter i fallande ordning behöver du inte veta antalet rader i tabellen i förväg.
-
Du måste ange ett korrelationsnamn (alias tabellalias) till en härledd tabell.
Här är min version av frågan:
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;