2010-08-20 29 views
11

Tôi có cơ sở dữ liệu mysql và 2 bảng giả sử khách hàng và trường học. Bây giờ mỗi bảng có vĩ độ và kinh độ của cột. Và tôi cần phải thực hiện một SELECT ví dụ từ bảng thứ hai, nơi các trường học trong một bán kính nhất định của một bản ghi từ bảng đầu tiên. Tính toán nên được thực hiện dựa trên vĩ độ và kinh độ. PS: Tôi đang sử dụng PHP.Nhận kết quả từ mysql dựa trên kinh độ vĩ độ

+2

Ngoài câu trả lời của Piskvor, hướng dẫn này khá tốt: [Geo Distance Search with MySQL] (http://www.scribd.com/doc/2569355/Geo-Distance- Tìm kiếm-với-MySQL), mặc dù tôi thấy trang không tải rất tốt. Thay vào đó, bản trình bày PowerPoint có thể được tìm thấy tại đây (http://www.mysqlconf.com/mysql2008/public/schedule/detail/347). – Mike

Trả lời

9

Bạn có thể tính toán một khoảng cách sử dụng một Spherical law of cosines:

SELECT DEGREES(ACOS(SIN(RADIANS(clients.latitude)) * SIN(RADIANS(schools.latitude)) + 
        COS(RADIANS(clients.latitude)) * COS(RADIANS(schools.latitude)) 
                * COS(RADIANS(clients.longitude 
                   – schools.longitude)))) 
     * 60 * 1.1515 * 1.609344 AS distance 
FROM clients, schools HAVING distance < $radius 

RADIANS(X) - độ để radian
ACOS(X) - cosin arc của X, nghĩa là giá trị mà cosin là X
DEGREES(X) - radian để các bằng cấp

60 - phút ở một mức độ
1,1515 - dặm trong một nautical mile
1.609344 - kilômét trong một dặm

+0

Cảm ơn, tôi sẽ thử ngay bây giờ và chấp nhận nếu nó hoạt động. – Centurion

+1

Vì vậy, nếu bán kính của tôi bằng ki lô mét, truy vấn sẽ giống như bạn viết hoặc tôi nên thay đổi nó? thanks – Centurion

+0

Mysql đưa ra một lỗi: Cột không xác định 'clients.longitude – schools.longitude' trong 'danh sách trường' ..., ý nghĩa của dấu '-' ở đây là gì? – Centurion

Các vấn đề liên quan