Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uzyskaj wyniki, które mieszczą się w promieniach znaczników z bazy danych

Aby rozwiązać ten problem, musisz zrozumieć równanie okręgu, które jest mniej więcej takie. Dla dowolnego punktu (x,y) mieszczącego się w okręgu o środku (x1, y1) i promieniu r jednostkami wynosi

(x-x1)^2 + (y - y1)^2 <= r^2

where a^b = a to the power b

Tutaj w Twoim przypadku Użytkownik B (szerokość, długość geograficzna) to środek okręgu, Użytkownik A (szerokość, długość geograficzna) to punkty (x,y) i promień =2 km.

Ale podstawowym problemem jest zamiana stopni szerokości na długości, więc tutaj jest rozwiązanie, 1 stopień =111,12 km. Aby więc zachować takie same jednostki po obu stronach równania, przekonwertujemy je na Kms

Zatem nasze końcowe równanie wygląda następująco:

((x-x1)*111.12)^2 + ((y-y1)*111.12)^2 = 4      (=2^2) 

Instrukcja SQL dla tego samego powinna wyglądać mniej więcej tak

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 */

Mam nadzieję, że to pomoże...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwersja MyISAM do InnoDB. Korzystny? Konsekwencje?

  2. Jak wybierać aż do osiągnięcia sumy

  3. Przechowywanie danych z pola tekstu sformatowanego do bazy danych z formatowaniem

  4. Czy mogę liczyć sesje, aby określić liczbę osób online?

  5. Menedżer kontekstu dla MySQLdb w Pythonie