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"
Редактиране
...за да използвате това като основа за yr lat/long calc, можете или да създадете временна таблица, или да използвате резултатите вградени със заявка, подобна на (опростено изчисление на DISTANCE) по-долу
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. може да искате да приложите груб филтър към вашите резултати за ширина/дълга, преди да направите 'скъпото' изчисление на широчина/дълго на резултатите или преди да го запаметите във времева таблица. Идеята би била да се игнорират всички резултати от r1 ясно извън радиус от 10 мили.
Ако използвате временна таблица, тя ще бъде специфична за потребителската сесия.
Редактиране 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. Ако вашите данни обхващат Гринуичкия меридиан, международната линия на датите или екватора, това няма да е строго правилно. Ако приемем, че всичките ви lat/longs са за Северна Америка, няма да е проблем.