簡體   English   中英

根據坐標之間的距離選擇位置

[英]Selection of locations based on distance between coordinates

我試圖編寫一個代碼,以計算給定坐標的最近位置。 但是我陷入了以下錯誤:

ERROR: column "distance" does not exist  
LINE 5: `HAVING distance < 150`  
in ROOT\frontend3.php on line 16. 

從pgadminIII數據庫中檢索數據。 歡迎所有幫助

<?php 

include 'connection.php';

$lat = $_GET['lat'];
$lng = $_GET['lng'];

#Select inormation from Parking database
$result = pg_query($conn, "
SELECT id, ( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) *     cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) 
AS distance 
FROM parking
HAVING distance < 150 
ORDER BY distance 
LIMIT 10
");
echo $result;

having用於當您對物料進行分組/匯總並且在分組之后需要條件時。 你的情況,你需要使用where

SELECT   id, ( ... ) AS distance 
FROM     parking
WHERE    distance < 150 
ORDER BY distance 
LIMIT    10
SELECT
    id
    ,( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) *     cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) AS distance 
FROM parking
WHERE
    ( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) *     cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) < 150
ORDER BY distance 
LIMIT 10;

2個問題HAVING在將group by用於聚合時使用,並在數據集之后應用。 因此,where語句更適合您。 第二距離是列別名,因此在where子句中將不可用,您可以通過將整個計算放在where子句中來解決該問題。 或使用子選擇。

SELECT *
FROM (
    SELECT
       id
       ,( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) *     cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) AS distance 
    FROM parking
) t
WHERE
    distance < 150
ORDER BY distance 
LIMIT 10;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM