Мы используем подзапрос UNION для получения ближайших цен по целевой цене.В каждом подзапросе мы получаем абсолютную дельту (разницу между ценой каждой модели и целевой ценой) и дельту ORDER BY в конце.Работает довольно быстро и стабильно.Надеюсь, это поможет;)
SET @CheckPrice = 3910;
(
SELECT
m_id,
m_name,
m_auto_price,
m_auto_discount,
ABS(m_auto_price - @CheckPrice)AS delta
FROM
s_models
WHERE
m_auto_price >= @CheckPrice
ORDER BY
m_auto_price ASC
LIMIT 10
)
UNION
(
SELECT
m_id,
m_name,
m_auto_price,
m_auto_discount,
ABS(m_auto_price - @CheckPrice)AS delta
FROM
s_models
WHERE
m_auto_price <= @CheckPrice
ORDER BY
m_auto_price DESC
LIMIT 10
)
ORDER BY
delta ASC,
m_auto_price DESC,
m_auto_discount DESC