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

Menggunakan klausa WHERE untuk menemukan POI dalam rentang jarak dari Bujur dan Lintang

Masalahnya adalah Anda tidak dapat mereferensikan kolom alias (distance dalam hal ini) dalam select atau where ayat. Misalnya, Anda tidak dapat melakukan ini:

select a, b, a + b as NewCol, NewCol + 1 as AnotherCol from table
where NewCol = 2

Ini akan gagal di keduanya:select pernyataan ketika mencoba memproses NewCol + 1 dan juga di where pernyataan ketika mencoba memproses NewCol = 2 .

Ada dua cara untuk menyelesaikan ini:

1) Ganti referensi dengan nilai yang dihitung itu sendiri. Contoh:

select a, b, a + b as NewCol, a + b + 1 as AnotherCol from table
where  a + b = 2

2) Gunakan select outer luar pernyataan:

select a, b, NewCol, NewCol + 1 as AnotherCol from (
    select a, b, a + b as NewCol from table
) as S
where NewCol = 2

Sekarang, mengingat kolom kalkulasi BESAR dan tidak terlalu ramah manusia :) Saya pikir Anda harus memilih opsi terakhir untuk meningkatkan keterbacaan:

SET @orig_lat=55.4058;  
SET @orig_lon=13.7907; 
SET @dist=10;

SELECT * FROM (
  SELECT 
    *, 
    3956 * 2 * ASIN(SQRT(POWER(SIN((@orig_lat -abs(latitude)) * pi()/180 / 2), 2) 
    + COS(@orig_lat * pi()/180 ) * COS(abs(latitude) * pi()/180) 
    * POWER(SIN((@orig_lon - longitude) * pi()/180 / 2), 2) )) as distance 
  FROM geo_kulplex.sweden_bobo
) AS S
WHERE distance < @dist
ORDER BY distance limit 10;

Sunting: Seperti yang disebutkan @Kaii di bawah ini, ini akan menghasilkan pemindaian tabel penuh. Bergantung pada jumlah data yang akan Anda proses, Anda mungkin ingin menghindarinya dan memilih opsi pertama, yang akan bekerja lebih cepat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemicu MySQL PHP - Bagaimana cara meneruskan variabel ke pemicu?

  2. PHP &MYSQL:menggunakan grup oleh untuk kategori

  3. Mengakses database server secara langsung melalui Ajax (tanpa PHP atau perantara lainnya)

  4. Hapus kueri yang tidak berfungsi di mysql

  5. Masukkan daftar ke dalam database saya menggunakan Python