Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhận kết quả nằm trong bức xạ điểm đánh dấu từ cơ sở dữ liệu

Để 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 ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiến thức cơ bản về điều chỉnh MySQL trên máy chủ chuyên dụng

  2. Sự khác biệt về MySQL giữa hai hàng của một Câu lệnh SELECT

  3. Tối ưu hóa hiệu suất truy vấn trong MySQL

  4. MySQL:Phân tích nhanh các loại liên kết

  5. Tôi có thể hoàn tác bảng ALTER trong - MySQL không?