select t.id from ranges t
where &value between t.start and t.end -- сначала отсекаем диапазоны, в которые точно не попадаем
order by t.end - t.start -- определяем "наиболее точный" диапазон как наименьший удовлетворяющий и сортируем по нему в порядке возрастания.
SELECT
s.*
FROM
(SELECT
t.id
,t.header_id
,t.user_id
FROM
test t
WHERE
t.user_id in (1,2,3,4,5)
ORDER BY RAND()) s
GROUP BY s.user_id