Đây là truy vấn tôi sử dụng trên công cụ định vị cửa hàng mà tôi làm việc với:
SELECT
`id`,
(
6371 *
acos(
cos( radians( :lat ) ) *
cos( radians( `lat` ) ) *
cos(
radians( `long` ) - radians( :long )
) +
sin(radians(:lat)) *
sin(radians(`lat`))
)
) `distance`
FROM
`location`
HAVING
`distance` < :distance
ORDER BY
`distance`
LIMIT
25
:lat
và :long
là những điểm mà người dùng đã vượt qua trong đó lat
và long
là các điểm được lưu trữ trong cơ sở dữ liệu.
The:khoảng cách được đo bằng dặm, trong phiên bản làm việc của mã,:khoảng cách thực sự được kéo từ một trình đơn thả xuống nằm trong khoảng từ 10-50 dặm
Việc thay đổi mã để hoạt động với km có thể được thực hiện bằng cách thay đổi 3959 (khoảng cách từ trung tâm trái đất đến bề mặt của nó tính bằng dặm) thành 6371 (3959 dặm được chuyển thành km) nhờ joshhendo cho giải pháp đó.