2016-10-04 7 views
-1

Was ich tun möchte, ist die nächstgelegene Stadt von einem Breiten- und Längengrad zu bekommen.
Meine Städte Tabelle hat drei Felder: lat, lng, Radius:Mysql-Reihenfolge von wo alias

SELECT * 
FROM cities 
where st_distance_sphere(point(@lat, @lng), point(lat, lng)) <= area LIMIT 1 

Mein Problem ist, dass ich sie bestellen möchten nach Entfernung:
Meine Abfrage sieht wie folgt aus. (die st_distance_sphere(point(@lat, @lng), point(lat, lng))) gibt die Entfernung an.
Aber anscheinend kann ich nicht einfach alias st_distance_sphere(point(@lat, @lng), point(lat, lng)) as distance und spezifizieren ORDER BY distance.

Also, wie würde ich Ergebnis basierend auf Entfernung bestellen?

Antwort

0

Ich würde erwarten, dass die Abfrage wie folgt aussehen:

SELECT c.*, 
     st_distance_sphere(point(@lat, @lng), point(lat, lng)) as dist 
FROM cities c 
HAVING st_distance_sphere(point(@lat, @lng), point(lat, lng)) <= area 
ORDER BY dist 
LIMIT 1 

Dieser verwendet eine MySQL-Erweiterung, die Bedingungen in der HAVING Klausel auch ohne GROUP BY ermöglicht. Mit der HAVING-Klausel können Sie Spaltenaliase für die Bedingungen verwenden, ohne eine Unterabfrage verwenden zu müssen.

0

Try

select b.* from (
SELECT a.*, st_distance_sphere(point(@lat, @lng), point(a.lat, a.lng)) as distance FROM cities a) b where b.distance<= area order by b.distance limit 1 
zu verwenden