SELECT ABS($user_value - numeric_field) as nearest, ...
FROM yourtable
ORDER BY nearest ASC
LIMIT 1
Nehmen Sie im Grunde die Differenz zwischen dem gewünschten Zahlenfeld und dem vom Benutzer bereitgestellten Wert, sortieren Sie dann aufsteigend nach der Differenz und geben Sie dann die erste Zeile zurück.
Eine exakte Übereinstimmung hätte also eine Differenz von 0 und würde zuerst herauskommen. Und wählen Sie dann aus, was "am nächsten" ist, wenn es keine genaue Übereinstimmung gibt.