【发布时间】:2017-07-28 18:52:01
【问题描述】:
假设我有 3 个这样的表:
cities
------
name
latitude
longitude
stalls
------
id
name
locations
---------
stall_id
latitude
longitude
date
我想找到过去 6 个月内离某个城市最近的摊位。那部分很好 - 我查询档位/位置表并使用 Haversine 进入距离。都很好。
这是我当前的查询:
SELECT stalls.name, ( 3959 * acos( cos( radians($lat) ) * cos( radians( locations.lat ) ) * cos( radians( locations.lng ) - radians($lng) ) + sin( radians($lat) ) * sin(radians(locations.lat)) ) ) AS distance
FROM locations
LEFT JOIN stalls ON stalls.id = locations.trader_id
WHERE locations.added > $date
HAVING distance < 10
但是,一个摊位可能在不同城市有多个新位置,我只想匹配最新位置的城市。 例如一个摊位可能匹配为最接近纽约,但随后为 LA 添加了一个新位置。现在它应该只在洛杉矶展示 6 个月,而不是纽约 - 至少在添加另一个位置之前。以前的位置需要存储,所以我不能清除这些。
在查询中执行此操作的最佳方法是什么?
【问题讨论】:
-
您应该显示您的查询。
-
我已添加查询