2017-02-17 9 views
1

location_dataテーブルSQLのSELECT文の値が存在する場合

id (pk) 
lng 
lat 

voting_dataテーブル

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を取得する - 特定の場所は(VoteData.LocationID = LocationData.ID)投票データを照合している場合、リストに追加> -

わからないJSON

へ>エンコードをどのように行うにはこれは...あらかじめありがとうございます。私は基本的には参加すると思う

+0

票データを照合して、なぜそれもあなたがしたいクエリに影響を与えるでしょうか? –

+0

MatchingはVoteData.LocationID = LocationData.IDを意味します。 1つのクエリでこれを行う方が簡単だと思いました。 – Vivida

+0

どのDBMSを使用していますか? –

答えて

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'を返します。

+0

絶対完璧です!どうもありがとう!! – Vivida

0

あなたがlocation_data.id = voting_data.location_idにクエリでvoting_dataテーブルに参加する必要があり

関連する問題