このクエリは私を狂気に駆り立てており、正直なところ、それを達成する方法がわかりません。
特定の半径内にあるすべての USERS と SHOPS の経度と緯度を取得し、それらの結果の ID に添付された他の情報を返す必要があります...半径の部分については、次のことがわかりました。
( 3959 * acos( cos( radians('48.453541') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-123.491765') ) + sin( radians('48.453541') ) * sin( radians( lat ) ) ) ) AS distance
^上記のステートメントのこのラジアンは、照会したいランダムなアドレスです。
しかし、本質的に 2 つの異なる行を 1 つの結果として取得すると、すぐに混乱してしまいます。両方のテーブルは、次の方法で作成されます。
id
meta_key
meta_value
したがって、USER と SHOP の両方の 2 つのキーの「meta_value」を取得する必要があります...USER の「meta_key」は「bid_user_lat」と「bid_user_lng」です...SHOP の「meta_key」は「 bid_resource_lat」と「bid_resource_lng」
理想的な結果 (それぞれを 1 つだけ表示しますが、半径に応じて複数にする必要があります):
id - 223
first_name - "Mark"
last_name - "Johnson"
bid_user_lat - 45.0000
bid_user_lng - -150.0000
id - 688
company_name - "Joe's Shop"
bid_resource_lat - 45.0000
bid_resource_lng - -150.0000
これは私を夢中にさせているだけなので、これを正しく説明していることを本当に願っています!
私の更新されたクエリは次のとおりですが、それでも結果は生成されず、次のようになります。
SET @lat = '48.453541';
SET @lng = '-123.491765';
SET @radius = '10000';
SELECT
wp_usermeta.user_id,
bid_user_lat.meta_value,
bid_user_lng.meta_value,
( 3959 * acos( cos( radians( @lat ) ) * cos( radians( bid_user_lat.meta_value ) ) * cos( radians( bid_user_lng.meta_value ) - radians( @lng ) ) + sin( radians( @lat ) ) * sin( radians( bid_user_lat.meta_value ) ) ) ) AS distance
FROM
wp_usermeta
JOIN
wp_usermeta bid_user_lat
ON wp_usermeta.user_id = bid_user_lat.user_id
AND wp_usermeta.meta_key = "bid_user_lat"
JOIN
wp_usermeta bid_user_lng
ON wp_usermeta.user_id = bid_user_lng.user_id
AND wp_usermeta.meta_key = "bid_user_lng"
HAVING distance < @radius ORDER BY distance LIMIT 0 , 20;