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.