location_data table :
id (pk)
lng
lat
voting_data table :
id (pk)
location_id (= location_data.id)
vote
这是当前缩短的查询,我必须检索我的位置数据,该数据被编码为JSON。
SELECT
`id`, `lat`, `lng`,
(6371 * acos(cos(radians('%s')) * cos(radians(lat)) *
cos(radians(lng) - radians('%s')) + sin(radians('%s')) *
sin(radians(lat)))) AS distance
FROM
location_data
HAVING
distance < 50
某些位置还有其他“投票数据”,我想将其编码为JSON(与相应位置配对),但仅在它们存在的情况下(VoteData.LocationID = LocationData.ID)。
伪代码:获取具有距离条件的所有LocationData
- &gt;如果某个位置具有匹配的投票数据(VoteData.LocationID = LocationData.ID),则添加到列表中 - &gt;编码为JSON
不知道如何做到这一点......提前谢谢。
答案 0 :(得分:1)
我认为基本的加入可以在这里工作:
SELECT t1.id, t1.lat, t1.lng,
(6371 * acos( cos( radians('%s') ) * cos( radians( t1.lat ) ) * cos( radians( t1.lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( t1.lat ) ) ) ) AS distance,
COALESCE(t2.vote, 'NA') AS voting_data
FROM location_data t1
LEFT JOIN voting_data t2
ON t1.id = t2.location_id
HAVING distance < 50
这将过滤掉不在半径50公里范围内的任何位置。没有匹配vote
数据的记录将返回'NA'
。
答案 1 :(得分:0)
您需要在location_data.id = voting_data.location_id
中加入查询中的voting_data表