Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

bảng tham gia mysql trên chính nó

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 đề.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chỉ mục một trường bit trong MYSQL

  2. Người theo dõi / cấu trúc cơ sở dữ liệu sau

  3. Không thể kết nối với máy chủ MySQL cục bộ thông qua socket homebrew

  4. Nhiều truy vấn phụ thuộc vào nhau

  5. Tạo cơ sở dữ liệu và người dùng MySQL từ PHP