2017-12-18 12 views
0

私はusers2テーブルから*を取得しようとしています。ユーザーの所在地が指定された半径内にあるテーブルです。2つのテーブルのサブクエリを結合する

ロケーションクエリはuser_location2テーブルで正常に動作します。

SELECT uid, (3959 * acos(cos(radians(28.247800068217)) * cos(radians(`lat`)) * cos(radians(`lon`) - radians(-80.726205977101)) 
+ sin(radians(28.247800068217)) * sin(radians(`lat`)))) 
AS distance FROM user_location2 
HAVING distance <= 25 ORDER BY time_stamp 

と内側は、私はちょうどトラブル2を組み合わせることを抱えている場所のサブクエリ

SELECT * 
FROM users2 
LEFT JOIN user_location2 
ON user_location2.uid = users2.id 

せずに罰金作品に参加します。ここに私の現在のクエリだけですべての行を返すので、私は明らかに何か間違っている。

SELECT * 
FROM users2 
LEFT JOIN user_location2 
    ON user_location2.uid = users2.id 
WHERE EXISTS (SELECT NULL, (3959 * acos(cos(radians(26.247800068217)) * cos(radians(`lat`)) * cos(radians(`lon`) - radians(-89.726205977101)) + sin(radians(26.247800068217)) * sin(radians(`lat`)))) 
AS distance FROM user_location2 
HAVING distance <= 5 ORDER BY time_stamp) 

編集は私が結果に含まれてはならない可能性の行の多くを排除するために第三表(user_like)に追加するために願っています

が含まれています。

のスクリプトがしたがって、基本的にユーザーが89、90および91は、位置半径の下に下落するだろう= 88

Here's a screenshot of the table state

user_idのために実行されているが、ユーザー88ため、結果には含まれないであろうとしましょうすでにそれらを好きだった。

答えて

0

は、参加

SELECT users2.* 
FROM users2 
LEFT JOIN user_location2 
ON user_location2.uid = users2.id 
WHERE (3959 * acos(cos(radians(28.247800068217)) * cos(radians(`lat`)) * cos(radians(`lon`) - radians(-80.726205977101)) 
+ sin(radians(28.247800068217)) * sin(radians(`lat`)))) < = 5 
ORDER BY time_stamp 

...これを試してみては2つのテーブル間で結構です。フィルタが必要なため、計算された列がselect句とwhere句に追加されました。それをビューに入れておくと、変更が必要な場合は1か所で行うことができます。

EDIT:あなたがそれを見る必要がないと思うので、SELECTからの計算を削除しました。それはフィルタリングされる必要があるので、WHERE句に残しておきます。

+0

素晴らしいこと!うまくいっているようだ。 users2からいくつかのWHERE句を投げることは可能ですか? WHERE users2.age>のように25 –

+1

はい。条件の前後に追加し、必要に応じてANDまたはORを使用してください。 – clinomaniac

+0

チャンスがあったときに編集した質問を確認できますか?私は本当にそれを感謝します。 –

0

あなたはこれを試すことができます。

SELECT * 
FROM users2 A 
LEFT JOIN user_location2 B 
    ON B.uid = A.id 
    WHERE (3959 * acos(cos(radians(26.247800068217)) * cos(radians( `B.lat`)) * cos(radians(`B.lon`) - radians(-89.726205977101)) + sin(radians(26.247800068217)) * sin(radians(`B.lat`)))) > 25; 
+0

答えに感謝します。私はこれといくつかの結果が混じっていました。クエリは、場所の半径からいくつかの間違った行を返しました。 –

+0

正しい結果と誤った結果を表示し、正しい結果を得るためにさらに条件を付けると役立ちます。 –

関連する問題