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"
Edytuj
...aby użyć tego jako podstawy do obliczenia yr lat/long, możesz albo utworzyć tabelę tymczasową, albo użyć wyników w tekście z zapytaniem podobnym do (uproszczonego obliczenia ODLEGŁOŚCI) poniżej
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. możesz chcieć zastosować zgrubny filtr do wyników szerokości/długości przed wykonaniem „kosztownego” obliczenia szerokości/długości na wynikach lub przed zapisaniem w tabeli tymczasowej. Pomysł polegałby na zignorowaniu wszystkich wyników r1 wyraźnie poza promieniem 10 mil.
Jeśli użyjesz tabeli tymczasowej, będzie ona zależna od sesji użytkownika.
Edytuj 2
Zobacz Kształt Ziemi dla szczegółów, ale zasadniczo 7 minut szerokości i długości geograficznej jest zawsze większe niż 10 mil, więc jeśli twoje szerokości i długości są rejestrowane w stopniach, jest to wystarczająco blisko 0,117. Każdy punkt różniący się o więcej niż 0,117 od celu nie może znajdować się w promieniu 10 mil. Oznacza to, że możesz filtrować tabelę r1 w następujący sposób:
(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. Jeśli Twoje dane obejmują południk Greenwich, międzynarodową linię zmiany daty lub równik, nie będzie to całkowicie poprawne. Zakładając, że wszystkie twoje łaty/długie dotyczą Ameryki Północnej, nie będzie problemu.