SELECT ABS($user_value - numeric_field) as nearest, ...
FROM yourtable
ORDER BY nearest ASC
LIMIT 1
po prostu weź różnicę między żądanym polem liczbowym a wartością podaną przez użytkownika, a następnie posortuj według różnicy rosnąco, a następnie zwróć pierwszy wiersz.
Tak więc dokładne dopasowanie miałoby różnicę 0 i wyszłoby jako pierwsze. A następnie wybierz ten, który jest „najbliższy”, jeśli nie ma dokładnego dopasowania.