2016-10-04 11 views
-1

私がしたいのは、最も近い緯度と経度の都市を取得することです。 LAT、LNG、半径:
私の都市のテーブルには、3つのフィールドを持っている
私のクエリは次のようになります。Mysql order by byエイリアス

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

私の問題は、私は距離によってそれらを注文したいということです。 (st_distance_sphere(point(@lat, @lng), point(lat, lng)))が距離を与える。
しかし、私はちょうどst_distance_sphere(point(@lat, @lng), point(lat, lng)) as distanceのエイリアスとORDER BY distanceと指定することはできません。

距離に基づいてどのように結果を注文しますか?

答えて

0

私は、クエリは、このように見えるように期待:

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 

これもGROUP BYなしHAVING句で条件を可能にMySQL拡張を使用しています。 HAVING句を使用すると、サブクエリを使用しなくても条件にカラム別名を使用できます。

0

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 
を使用してみてください