Следующее:
select
`restaurants`.*,
ST_Distance_Sphere(point(longitude, latitude), point(12.345600, -12.345600)) as distance
from `restaurants`
where `distance` <= `delivery_max_range`
вернет Unknown column 'distance' in 'where clause'
.
Небольшой поиск показал решение как:
select
`restaurants`.*,
from `restaurants`
where
ST_Distance_Sphere(point(longitude, latitude`), point(12.345600, -12.345600)) <= `delivery_max_range`
Что действительно работает, но мне нужен этот вычисленный псевдоним столбца distance
, так как я хочу напечатать его конечному пользователю.
Я придумал следующее:
select
`restaurants`.*,
(ST_Distance_Sphere(point(longitude, latitude), point(12.345600, -12.345600))) as `distance`
from `restaurants`
where
ST_Distance_Sphere(point(longitude, latitude`), point(12.345600, -12.345600)) <= `delivery_max_range`
который выглядит так же уродливо, как и он наверное есть. Есть ли лучший способ сделать это? Меня беспокоит двойное вычисление расстояния от двигателя mysql. Существуют тысячи ресторанов.
Пример использования: я хочу отфильтровать рестораны, которые могут (delivery_max_range
) доставлять товары в мой дом (lng = 12.345600, lat = -12.345600). Я хочу показать distance
каждому ресторану, отвечающему этим критериям.