I’m using following sql code to find out ‘ALL’ poi closest to the set coordinates, but I would want to find out specific poi instead of all of them. When I try to use the where clause I get an error and it doesn’t work and this is where I’m currently stuck, since I only use one table for all the coordinates off all poi’s.
SET @orig_lat=55.4058;
SET @orig_lon=13.7907;
SET @dist=10;
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
HAVING distance < @dist
ORDER BY distance limit 10;
The problem is that you can not reference an aliased column (
distancein this case) in aselectorwhereclause. For example, you can’t do this:This will fail in both: the
selectstatement when trying to processNewCol + 1and also in thewherestatement when trying to processNewCol = 2.There are two ways to solve this:
1) Replace the reference by the calculated value itself. Example:
2) Use an outer
selectstatement:Now, given your HUGE and not very human-friendly calculated column 🙂 I think you should go for the last option to improve readibility:
Edit: As @Kaii mentioned below this will result in a full table scan. Depending on the amount of data you will be processing you might want to avoid that and go for the first option, which should perform faster.