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"
Chỉnh sửa
... để sử dụng điều này làm cơ sở cho calc vĩ độ / dài năm, bạn có thể tạo bảng tạm thời hoặc sử dụng nội tuyến kết quả với một truy vấn tương tự như (DISTANCE calc đơn giản hóa) bên dưới
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. bạn có thể muốn áp dụng một bộ lọc thô cho kết quả vĩ độ / kinh độ của mình trước khi thực hiện phép tính vĩ độ / kinh độ 'đắt tiền' trên kết quả hoặc trước khi lưu trữ trong bảng tạm thời. Ý tưởng sẽ là bỏ qua tất cả các kết quả r1 rõ ràng bên ngoài bán kính 10 dặm.
Nếu bạn sử dụng bảng tạm thời, nó sẽ là phiên người dùng cụ thể.
Chỉnh sửa 2
Hãy xem Hình dạng của Trái đất để biết chi tiết, nhưng về cơ bản kinh độ &vĩ độ 7 phút luôn lớn hơn 10 dặm, vì vậy nếu kinh độ &vĩ độ của bạn được ghi lại theo độ thì đây là 0,117 gần đủ. Bất kỳ điểm nào chênh lệch hơn 0,117 so với mục tiêu của bạn đều không thể nằm trong bán kính 10 dặm của bạn. Điều này có nghĩa là bạn có thể lọc bảng r1 như:
(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. Nếu dữ liệu của bạn trải dài theo Kinh tuyến Greenwich, Đường ngày Quốc tế hoặc Xích đạo, điều này sẽ không hoàn toàn chính xác. Giả sử tất cả kinh độ / kinh độ của bạn đều dành cho Bắc Mỹ thì sẽ không thành vấn đề.