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.