Ja, du kan oprette en gemt funktion til dette formål. Noget som dette:
DELIMITER //
DROP FUNCTION IF EXISTS Haversine //
CREATE FUNCTION Haversine
( myLat FLOAT
, myLong FLOAT
, db_lat FLOAT
, db_long FLOAT
, unit VARCHAR(20)
)
RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE haver FLOAT ;
IF unit = 'MILES' --- calculations
SET haver = ... --- calculations
RETURN haver ;
END //
DELIMITER ;
Jeg tror ikke, det giver nogen hastighedsgevinster, men det er godt af alle de andre grunde, du nævner:Læsbarhed, genbrugelighed, nem vedligeholdelse (forestil dig, at du finder en fejl efter 2 år, og du skal redigere koden om nogle få) hundrede steder).