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

Bagaimana cara mendapatkan daftar pinggiran kota di sekitar lokasi lalu ulangi untuk lokasi lain menggunakan MySql?

Anda hanya perlu melakukan self-join. Bergabung tabel adalah sangat bagian mendasar dari SQL—Anda benar-benar harus membacanya sebelum mencoba memahami jawaban ini lebih lanjut.

SELECT   poi.asciiname,
         suburb.asciiname,
         suburb.country,
         DEGREES(
           ACOS(
             SIN(RADIANS(   poi.latitude))
           * SIN(RADIANS(suburb.latitude))
           + COS(RADIANS(   poi.latitude))
           * COS(RADIANS(suburb.latitude))
           * COS(RADIANS(poi.longitude - suburb.longitude))
           )
         ) * 60 * 1.852 AS distance
FROM     geoname AS poi
    JOIN geoname AS suburb
WHERE    poi.asciiname IN ('Tamworth', 'Birmingham', 'Roanoke')
     AND poi.population > 0
     AND poi.fcode = 'PPL'
     AND suburb.fcode IN ('PPLX', 'PPPL')
HAVING   distance <= 60
ORDER BY poi.asciiname, distance

Lihat di sqlfiddle .

Anda akan melihat bahwa saya telah menggunakan IN() operator sebagai singkatan dari value = A OR value = B OR ... .

Anda juga akan memperhatikan bahwa saya telah menggunakan DEGREES() dan RADIANS() fungsi daripada mencoba melakukan konversi tersebut secara eksplisit.

Anda kemudian mengalikan menit lintang dengan faktor 1.851999999962112 , yang agak aneh:sangat dekat dengan 1.852 , yang merupakan jumlah tepat kilometer dalam satu mil laut (secara historis didefinisikan sebagai satu menit garis lintang), namun sedikit berbeda—saya berasumsi Anda bermaksud menggunakannya.

Terakhir, Anda memiliki nilai literal yang digunakan untuk memfilter jarak dalam kumpulan hasil sebagai string, yaitu '60' , padahal jelas ini adalah nilai numerik dan harus diberi tanda kutip.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 50 Pertanyaan Wawancara MySQL Teratas yang Harus Anda Siapkan Pada Tahun 2022

  2. Mengawali * (tanda bintang) ke Pencarian Teks Lengkap di MySQL

  3. Kotak centang PHP diatur untuk memeriksa berdasarkan nilai basis data

  4. Tetapkan nilai AUTO_INCREMENT secara terprogram

  5. Jika variabel sama dengan nilai php