Het probleem is dat je niet kunt verwijzen naar een gealiaste kolom (distance
in dit geval) in een select
of where
clausule. U kunt dit bijvoorbeeld niet doen:
select a, b, a + b as NewCol, NewCol + 1 as AnotherCol from table
where NewCol = 2
Dit mislukt in beide:de select
statement bij het verwerken van NewCol + 1
en ook in de where
statement bij het verwerken van NewCol = 2
.
Er zijn twee manieren om dit op te lossen:
1) Vervang de referentie door de berekende waarde zelf. Voorbeeld:
select a, b, a + b as NewCol, a + b + 1 as AnotherCol from table
where a + b = 2
2) Gebruik een buitenste select
verklaring:
select a, b, NewCol, NewCol + 1 as AnotherCol from (
select a, b, a + b as NewCol from table
) as S
where NewCol = 2
Nu, gezien je ENORME en niet erg mensvriendelijke berekende kolom :) Ik denk dat je voor de laatste optie moet gaan om de leesbaarheid te verbeteren:
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;
Bewerken: Zoals @Kaii hieronder vermeldt, resulteert dit in een volledige tafelscan. Afhankelijk van de hoeveelheid gegevens die je gaat verwerken, wil je dat misschien vermijden en voor de eerste optie gaan, die sneller zou moeten werken.