PHP Auswertung der Entfernung von GPS Punkten

PSP_GIGA

Cadet 3rd Year
Registriert
Jan. 2011
Beiträge
57
Hallo Leute,

das berechnen der Entfernung zwischen zwei GPS Punkten funktioniert ohne Probleme.

Nur die Auswertung macht Probleme. Es soll mir nur die ID ausgeben, der GPS Punkte die 200m entfernt sind.

Ich bekomm aber immer die ID und die distance zurück.

PHP:
$query = mysql_query("SELECT ID, ( 6371 * acos( cos( radians($mylat) ) * cos( radians( LAT ) ) * cos( radians( LNG ) - radians($mylng) ) + sin( radians($mylat) ) * sin( radians( LAT ) ) ) ) AS distance FROM GPS HAVING distance < 0.2 ORDER BY distance LIMIT 0 , 20");
    
while($e=mysql_fetch_assoc($query))
$result[]=$e;

in result steht [{"ID":"65","distance":"0.00422222002768575"}]

Gibt es die Möglichkeit distance nicht mit auszugeben?

Weil ich möchte result in einer darauf folgenden SQL Abfrage verwenden und da brauch ich nur die ID und wenn ich mehrere Einträge habe, macht distance dann Probleme.

Vielen Dank für Antworten
PSP_GIGA
 
Du musst dazu das gesamte Konstrukt
"( 6371 * acos( cos( radians($mylat) ) * cos( radians( LAT ) ) * cos( radians( LNG ) - radians($mylng) ) + sin( radians($mylat) ) * sin( radians( LAT ) ) ) )"

in die Where-Klausel schieben und oben weglassen.

Also SELECT ID FROM GPS WHERE [siehe oben] < 0.2 ORDER BY (...)
Alles, was zwischen select und FROM steht gehört zum result-datensatz.

Grüße
 
Danke für die schnelle Antwort. Das was du sagst macht auch sinn, nur leider bekomm ich null NULL zurück..

Code:
$query = mysql_query("SELECT ID FROM GPS WHERE ( 6371 * acos( cos( radians($mylat) ) * cos( radians( LAT ) ) * cos( radians( LNG ) - radians($mylng) ) + sin( radians($mylat) ) * sin( radians( LAT ) ) ) ) < 0.2 ORDER BY distance LIMIT 0 , 20");

so sieht mein Code jetzt aus

###############
Edit:

ich hab den Fehler gefunden ;) distance ist ja nicht definiert deswegen hat er da ein Fehler
richtig ist der Code so:
Code:
$query = mysql_query("SELECT ID FROM GPS WHERE ( 6371 * acos( cos( radians($mylat) ) * cos( radians( LAT ) ) * cos( radians( LNG ) - radians($mylng) ) + sin( radians($mylat) ) * sin( radians( LAT ) ) ) ) < 0.2 ");

Jetzt ist es zwar nicht mehr auf 20 Einträge begrenzt aber das ist nicht so schlimm.

Vielen Dank nochmal

Gruß
 
Zuletzt bearbeitet: (fehler gefunden)
Warum hast du nicht statt dessen einfach nur die interessanten Werte, also die IDs, weiter verarbeitet und den Rest verfallen lassen? Das wäre je nach Datenmenge wohl deutlich besser als auf ORDER und LIMIT zu verzichten.

Spätestens eine anständige objektorientierte Datenbank-Abstraktion würde es dir erlauben, zwar sonstwie viele Felder zu holen, aber nur die interessanten sehr leicht auszuwerten.
 
Daaron schrieb:
Das wäre je nach Datenmenge wohl deutlich besser als auf ORDER und LIMIT zu verzichten.

Öhm er ist doch so oder so nicht gezwungen, auf ORDER und LIMIT zu verzichten denke ich. Kenne aber in mysql nt im detail aus..
 
na ja, ich wüsst nicht, ob/wie man eine Berechnung in einer WHERE-Klausel jetzt noch mit nem Order versehen kann... und ohne Order macht Limit wenig Sinn.
 

Ähnliche Themen

Zurück
Oben