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"
Modifier
... pour l'utiliser comme base pour le calcul lat/long an, vous pouvez soit créer une table temporaire, soit utiliser les résultats en ligne avec une requête similaire au (calcul DISTANCE simplifié) ci-dessous
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. vous voudrez peut-être appliquer un filtre grossier à vos résultats lat/long avant de faire le calcul lat/long "coûteux" sur les résultats, ou avant de les stocker dans une table temporaire. L'idée serait d'ignorer tous les résultats r1 clairement en dehors d'un rayon de 10 milles.
Si vous utilisez une table temporaire, elle sera spécifique à la session utilisateur.
Modifier 2
Jetez un œil à Forme de la Terre pour plus de détails, mais essentiellement 7 minutes de lat &longitude est toujours supérieure à 10 miles, donc si votre lat &longs sont enregistrés en degrés c'est 0,117 assez près. Tout point différant de plus de 0,117 de votre cible ne peut pas être à l'intérieur de votre rayon de 10 milles. Cela signifie que vous pouvez filtrer la table r1 comme :
(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. Si vos données couvrent le méridien de Greenwich, la ligne de date internationale ou l'équateur, cela ne sera pas strictement correct. En supposant que tous vos lat/longs sont pour l'Amérique du Nord, cela ne posera pas de problème.