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"
Bearbeiten
...um dies als Grundlage für die Berechnung von Längen-/Breitengraden im Jahr zu verwenden, können Sie entweder eine temporäre Tabelle erstellen oder die Ergebnisse inline mit einer Abfrage ähnlich der (vereinfachten DISTANZ-Berechnung) unten verwenden
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. Möglicherweise möchten Sie einen groben Filter auf Ihre Lat/Long-Ergebnisse anwenden, bevor Sie die „teure“ Lat/Long-Berechnung der Ergebnisse durchführen oder bevor Sie sie in einer temporären Tabelle speichern. Die Idee wäre, alle r1-Ergebnisse eindeutig außerhalb eines 10-Meilen-Radius zu ignorieren.
Wenn Sie eine temporäre Tabelle verwenden, ist diese benutzersitzungsspezifisch.
Bearbeiten 2
Sehen Sie sich Shape of the Earth an für Details, aber im Wesentlichen sind 7 Minuten Breite und Länge immer größer als 10 Meilen, wenn also Ihre Breiten- und Längengrade in Grad aufgezeichnet werden, ist dies 0,117 nahe genug. Jeder Punkt, der um mehr als 0,117 von Ihrem Ziel abweicht, darf nicht innerhalb Ihres 10-Meilen-Radius liegen. Das bedeutet, dass Sie die r1-Tabelle wie folgt filtern können:
(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. Wenn sich Ihre Daten über den Meridian von Greenwich, die internationale Datumsgrenze oder den Äquator erstrecken, ist dies nicht ganz korrekt. Angenommen, alle Ihre Breiten-/Längengrade sind für Nordamerika bestimmt, ist das kein Problem.