select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
from metatdatatable t1, metadatatable t2
where t1.meta_key = "_wp_field1"
and t2.post_id = t1.post_id
and t2.meta_key = "_wp_field2"
編集
...これをyrlat/ long calcの基礎として使用するには、一時テーブルを作成するか、以下の(簡略化されたDISTANCE calc)のようなクエリで結果をインラインで使用します
select d1.post_id, d1.distance
from
(select r1.post_id, ABS($lat - r1.lat) + ABS($lon - r1.lon) as DISTANCE
from (select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
from metatdatatable t1, metadatatable t2
where t1.meta_key = "_wp_field1"
and t2.post_id = t1.post_id
and t2.meta_key = "_wp_field2") as r1
) as d1
where d1.distance <= 10
order by d1.distance ASC
NB。結果に対して「高価な」緯度/経度の計算を行う前、または一時テーブルに保存する前に、緯度/経度の結果に大まかなフィルターを適用することをお勧めします。アイデアは、半径10マイルの外側でr1の結果をすべて無視することです。
一時テーブルを使用する場合は、ユーザーセッション固有になります。
編集2
地球の形 をご覧ください 詳細については、基本的に7分の緯度と経度は常に10マイルを超えるため、緯度と経度が度で記録されている場合、これは十分に近い0.117です。ターゲットから0.117を超えて異なるポイントは、半径10マイル以内に含めることはできません。これは、r1テーブルを次のようにフィルタリングできることを意味します:
(select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
from metatdatatable t1, metadatatable t2
where t1.meta_key = "_wp_field1"
and t2.post_id = t1.post_id
and t2.meta_key = "_wp_field2"
and ABS(t2.meta_value - $lon) < 0.117
and ABS(t1.meta_value - $lat) < 0.117
) as r1
NB。データがグリニッジ子午線、日付変更線、または赤道にまたがっている場合、これは厳密には正しくありません。すべての緯度/経度が北米向けであると仮定すると、問題にはなりません。