一千萬個為什麽

搜索

SQLite:查找函數的最小值

我有那些桌子

Node (#id, route_id, lat, lng)

路線(#ID)

我有四個輸入值:$ lat1,$ lng1,$ lat2,$ lng2,它們代表2個GPS坐標GPS1和GPS2。 我還有一個我添加到數據庫的距離函數:distance(lat1,lng1,lat2,lng2)

我正在尋找的是能給我最近點GPS1的請求,以及每條路線最接近GPS2的點。 所以我想它應該開始像:

SELECT r.id, n1.lat, n1.lng, n2.lat, n2.lng
FROM Node n1, Node n2
JOIN Route r ON n1.route_id = r.id AND n2.route_id = r.id

我試著補充一下

WHERE distance(n1.lat,n1.lng,$lat1,$lng1) = MIN (distance(n1.lat,n1.lng,$lat1,$lng1))
AND distance(n2.lat,n2.lng,$lat2,$lng2) = MIN (distance(n2.lat,n2.lng,$lat2,$lng2))

但它拋出了這個錯誤:

"misuse of aggregate function MIN()"

我還以為我可以用

SELECT r.id, n1.lat, n1.lng, n2.lat, n2.lng, distance(n1.lat,n1.lng,$lat1,$lng1) AS d1, distance(n2.lat,n2.lng,$lat2,$lng2) AS d2
FROM Node n1, Node n2
JOIN Route r ON n1.route_id = r.id AND n2.route_id = r.id
GROUP BY r.id

然後用d1為n1.lat,n1.lng,d1列和d2對n2.lat,n2.lng,d2列進行排序,但我不知道如何做到這一點。

任何想法 ?

最佳答案

您需要執行相關查詢:

SELECT r.id, n1.lat, n1.lng, n2.lat, n2.lng
FROM Node n1, Node n2
JOIN Route r ON n1.route_id = r.id AND n2.route_id = r.id
WHERE distance(n1.lat,n1.lng,$lat1,$lng1) = (
                                             SELECT MIN (distance(lat,lng,$lat1,$lng1))
                                             FROM Node c_n
                                             WHERE c_n.nid = n1.nid)
AND distance(n2.lat,n2.lng,$lat2,$lng2) = (
                                             SELECT MIN (distance(lat,lng,$lat1,$lng1))
                                             FROM Node c_n
                                             WHERE c_n.nid = n2.nid)

(在這個猜想中,我無法測試這個,請原諒我,如果這不準確,但它應該是關閉的。我稍後會檢查。)

轉載註明原文: SQLite:查找函數的最小值