Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dapatkan hasil yang termasuk dalam radius penanda dari database

Untuk menyelesaikan ini, Anda perlu memahami persamaan lingkaran, yang kira-kira seperti iniUntuk setiap titik (x,y) yang berada di dalam lingkaran dengan pusat (x1, y1) dan jari-jari r satuan adalah

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

where a^b = a to the power b

Di sini, dalam kasus Anda, Pengguna B (lintang, bujur) adalah pusat lingkaran, Pengguna A (lintang, bujur) adalah titik (x,y) dan radius =2kms.

Tapi masalah dasarnya adalah mengubah derajat garis lintang ke garis bujur, jadi inilah solusinya, 1 derajat =111,12 km. Jadi agar satuan tetap sama di kedua ruas persamaan, kita ubah ke Kms

Jadi persamaan akhir kita menjadi:

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

Pernyataan SQL untuk hal yang sama akan terlihat seperti ini

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

Semoga ini bisa membantu...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menemukan hubungan antar tabel yang berhubungan jarak jauh? MySQL

  2. Driver JDBC MySQL 5.1.33 - Masalah Zona Waktu

  3. Buat aplikasi Ruby on Rails baru menggunakan MySQL alih-alih SQLite

  4. PILIH beberapa baris WHERE cocok dengan dua kondisi

  5. Memahami struktur catatan MyISAM