Att fokusera på (a):
Tidigare har jag förberäknat delar, lagrat lat, long, xaxis, yaxis och zxais, där x, y och z definieras som:
xaxis = cos(radians(Lat)) * cos(radians(Lon))
yaxis = cos(radians(Lat)) * sin(radians(Lon))
zaxis = sin(radians(Lat))
Avståndet kan sedan beräknas med SQL löst som (acos( xaxis * $xaxis + yaxis * $yaxis + zaxis * $zaxis ) * 6367.0 / 1.852)
(där de som börjar med en $ är förberäknade för startpunkten i fråga på samma sätt som ovan)
Förberäkning på detta sätt skjuter den relativt dyra triggen till en engångshändelse och förenklar frågan.