Ciao, sono un po' di fretta, quindi ti do solo le linee guida... al massimo domani ti rispondo meglio.

supponiamo che il campo della tabella mysql si chiami numero,

calcoli la differenza tra i numeri nel database e quello che cerchi, e li ordini per "errore" crescente.

esempio (non so se in mysql c'è la funzione ABS, ma credo di si...)

SELECT numero, ABS(numero - $n) AS errore FROM tabella WHERE 1 ORDER by errore ASC

risultato:
codice:
numero
 1345
 1301
 1201
 1099

restituisce:
numero    errore
 1201        1
 1301      101
 1099      101
 1345      145
Spero sia chiaro...

[EDIT]
mi sono accorto che se non lo trova uguale deve considerare solo quelli in eccesso... basta che togli ABS.
se vuoi solo il primo metti LIMIT 1 in fondo alla query.
[/EDIT]

Ciauz