Właśnie zacząłem używać MySQL z PHP i chciałbym wiedzieć, czy można utworzyć niestandardową funkcję. Ten fragment kodu powinien zilustrować, co próbuję zrobić.Tworzenie niestandardowej funkcji MySQL?
// a somewhat complicated formula not suitable to embed into the query
function Distance($latA, $lonA, $latB, $lonB)
{
// earth's radius
$radius = 3956;
$latA = deg2rad($latA);
$lonA = deg2rad($lonA);
$latB = deg2rad($latB);
$lonB = deg2rad($lonB);
// calculate deltas
$deltaLat = $latB - $latA;
$deltaLon = $lonB - $lonA;
// calculate Great Circle distance
$result = pow(sin($deltaLatitude/2.0), 2) + (cos($latA) * cos($latB) * pow(sin($deltaLon/2.0), 2));
$distance = $radius * 2 * atan2(sqrt($result), sqrt(1 - $result));
return $distance;
}
// how can I call Distance() in my query?
$query = "SELECT lat, lon FROM zipcodes WHERE Distance(lat, lon, 0, 0) < 20";
mysql_query($query);
Z góry dziękuję za pomoc!
Wystarczy FYI, można to zrobić doskonale odnaleźć z zapytania. W rzeczywistości, jeśli użyjesz indeksu przestrzennego na podstawie twoich lat/lngs i przekonasz się, że wyniki są imponujące. Niesamowity. – Layke
Nie jestem pewien co masz na myśli, czy mógłbyś to wyjaśnić? Również "nieodpowiedni" nie miałem na myśli pod względem wydajności (nic o tym nie wiem); Miałem na myśli, jak długo będzie to długie pytanie. –