Để giải bài này, bạn cần phải hiểu phương trình của đường tròn, tương tự như thế này Đối với bất kỳ điểm nào (x, y) nằm trong đường tròn có tâm (x1, y1) và đơn vị bán kính r là
(x-x1)^2 + (y - y1)^2 <= r^2
where a^b = a to the power b
Ở đây trong trường hợp của bạn Người dùng B (vĩ độ, kinh độ) là tâm của vòng tròn, Người dùng A (vĩ độ, kinh độ) là điểm (x, y) và bán kính =2kms.
Nhưng vấn đề cơ bản là thay đổi vĩ độ thành vĩ độ, vì vậy đây là giải pháp, 1 độ =111,12 km. Vì vậy, để giữ cho các đơn vị giống nhau ở cả hai vế của phương trình, chúng ta sẽ chuyển nó thành Kms
Vì vậy, phương trình cuối cùng của chúng tôi trở thành:
((x-x1)*111.12)^2 + ((y-y1)*111.12)^2 = 4 (=2^2)
Câu lệnh SQL cho cùng một câu lệnh sẽ giống như thế này
SELECT A.user_id, A.radius_id, A.latitude, A.logitude
FROM UserA AS A,
(SELECT user_id, latitude, longitude
FROM UserB
WHERE user_id = 8) AS B
WHERE (POW((A.latitude-B.latitude)*111.12, 2) + POW((A.longitude - B.longitude)*111.12, 2)) <= 4
/* **Edit** Here I have used (A.longitude - B.longitude)*111.12, for more accurate results one can replace it with (A.longitude - B.longitude)*111.12*cos(A.latitude)) or (A.longitude - B.longitude)*111.12*cos(B.latitude))
And, as i have suggested in the comments that first filter some records based on approximation, so whether one uses A.latitude or B.latitude it will not make much difference */
Hy vọng điều này sẽ giúp ...