Page 1 of 1

MYSQL Funktion gibt flasches ERgebnis, PHP funktioniert

Posted: 2010-11-12 17:16
by mcxm
Hallo,

ich benutze eine PHP Funktion um die Entfernung von 2 Orten zu ermitteln:

Dazu nehme ich jeweils die (Längen- und Breitengrade) der Orte:

Code: Select all

$x1 = '7.6025390625';// Longitude
$y1 = '50.273333333332';// Latitude
$x2 = '7.6';// Longitude
$y2 = '50.4167';// Latitude
Folgende Funktion errechnet die Entfernung:

Code: Select all

$distance = acos(sin($y2=deg2rad($y2)) * sin($y1=deg2rad($y1))+cos($y2) * cos($y1) * cos(deg2rad($x2) - deg2rad($x1))) * (6380);
Das Ergebnis stimmt: $distance = 16.090628132792 km


Jetzt möchte ich das ganze gerne als MYSQL Abfrage nutzen, die später auch anstelle der konstanten werte entsprechend auf DB Felder zugreift:

Das ganze umgeschrieben auf MySQL (zum Test Variablen durch Werte ersetzt):

Code: Select all

SELECT acos(sin(50.4167=radians(50.4167)) * sin(50.273333333332=radians(50.273333333332))+cos(50.4167) * cos(50.273333333332) * cos(radians(7.6) - radians(7.628333333332))) * (6380) AS Entfernung 
Jetzt bekomme ich einen Rückgabewert von 966.0624898509

---------
Keine Ahnung was ich da falsch mache, eine Syntaxfehlermeldung kommt auch nicht. Wahrscheinlich eine Kleinigkeit aber ich bin mittlerweile betriebsblind...

Kann mir jemand sagen wie die SQL Funktion richtig formuliert lauten muss ?

Vielen Dank.

Gruß

Markus

Re: MYSQL Funktion gibt flasches ERgebnis, PHP funktioniert

Posted: 2010-11-12 17:33
by Roger Wilco
mcxm wrote:

Code: Select all

50.4167=radians(50.4167)
Das Resultat dieses Ausdrucks ist immer 0. Das willst du sicherlich nicht.

Re: MYSQL Funktion gibt flasches ERgebnis, PHP funktioniert

Posted: 2010-11-12 17:55
by mcxm
Hallo,

vielen Dank für die Tipps, ich ahbe bisher leider noch keine Stored Procedures genutzt.

Könntest du mir anhand von diesem Beispiel eine Erklärung schreiben, wie ich die PHP Funktion (die so ja funktioniert) in MySQL als Stored Procedure in Kombination mit einem Statement anlegen und aufrufen kann ?

Vielen Dank.

Markus