ниже находится запрос на поиск товары поблизости от пользователя lat, lon и Radius ..
Я хочу, чтобы эта функция просто Вернуть ID магазина … Запрос, похоже, не работает, однако
SELECT
product_id
FROM
sm_products
WHERE
ROUND(
$earthRadius * ACOS(
SIN( $userlat*PI()/180 ) * SIN( geo_lat*PI()/180 )
+ COS( $userlat*PI()/180 ) * COS( geo_lat*PI()/180 ) * COS( (geo_lon*PI()/180) - ($userlon*PI()/180) ) )
, 1) AS distance <= $userRadius
ORDER BY
distance ASC
Приведенный ниже запрос, который работает … но идентификатор возвращает идентификатор и расстояние, которое мне не нужно … Мне просто нужно вернуть product_id
в радиусе
SELECT
ROUND(
$earthRadius * ACOS(
SIN( $userlat*PI()/180 ) * SIN( geo_lat*PI()/180 )
+ COS( $userlat*PI()/180 ) * COS( geo_lat*PI()/180 ) * COS( (geo_lon*PI()/180) - ($userlon*PI()/180) ) )
, 1)
AS distance,
product_id
FROM
sm_products
HAVING
distance <= $userRadius
ORDER BY
distance ASC
Любая помощь?
РЕДАКТИРОВАТЬ (вызов функции)
$params['product_id'] = $this->productsInRadius($userlat, $userlon, $radius);
@JonStirling Этот запрос работает … Но я не уверен, что это хорошая практика
SELECT
product_id
FROM
sm_products
WHERE
ROUND(
$earthRadius * ACOS(
SIN( $userlat*PI()/180 ) * SIN( geo_lat*PI()/180 )
+ COS( $userlat*PI()/180 ) * COS( geo_lat*PI()/180 ) * COS( (geo_lon*PI()/180) - ($userlon*PI()/180) ) )
, 1) <= $userRadius
ORDER BY
ROUND(
$earthRadius * ACOS(
SIN( $userlat*PI()/180 ) * SIN( geo_lat*PI()/180 )
+ COS( $userlat*PI()/180 ) * COS( geo_lat*PI()/180 ) * COS( (geo_lon*PI()/180) - ($userlon*PI()/180) ) )
, 1) ASC
Так что я считать следующее должно работать, но я в настоящее время не могу проверить это. Если это не так, пожалуйста, укажите это, и я скину ответ.
SELECT product_id
FROM (
SELECT
product_id,
ROUND(
$earthRadius * ACOS(SIN( $userlat*PI()/180 ) * SIN(geo_lat*PI()/180 ) + COS( $userlat*PI()/180 ) * COS( geo_lat*PI()/180 ) * COS( (geo_lon*PI()/180) - ($userlon*PI()/180))
, 1) AS distance
FROM
sm_products
WHERE
distance <= $userRadius
)
ORDER BY
distance ASC;