Tôi đã thấy hai giải pháp khả thi.
Điều đầu tiên: Đối với mỗi cửa hàng thành phố trong cơ sở dữ liệu vĩ độ và kinh độ của nó; khi người dùng nhận được truy vấn, bạn sẽ tính toán khoảng cách với mọi thành phố khác và trả về kết quả.
Chuyên nghiệp là bạn có thể thêm mọi thành phố trong db mà không cần thêm thông tin khác.
Tại đây
bạn cũng có thể tìm thấy các công thức, mẫu và mã cho calc khoảng cách vĩ độ-kinh độ ...
Thứ hai:
Tạo bảng cities_dist
với ba trường:city1_id, city2_id, distance
và đưa vào bên trong mọi sự kết hợp có thể có giữa các thành phố của bạn. Nhờ đó bạn có thể viết một truy vấn tùy theo thành phố đã chọn là city1_id hoặc city2_id.
Đặc biệt là bạn có thể sử dụng một truy vấn đơn giản mà không cần bất kỳ calc nào, trong khi khuyết điểm là bạn phải điền bảng này bất cứ lúc nào bạn chèn một thành phố mới vào cơ sở dữ liệu của mình.
ĐƯỢC CHỈNH SỬA sau khi người dùng nhận xét:
Hãy tưởng tượng bạn có ba thành phố
ID NAME
1 New York
2 Rome
3 Berlin
Bảng đó sẽ giống như
CITY1 CITY2 DIST
1 2 1500
1 3 1200
2 3 400
Khi người dùng muốn bay từ Berlin, bạn có thể sử dụng
SELECT c1.name, c2.name, cd.dist
FROM cities_dist cd
INNER JOIN cities c1 ON cd.city1 = c1.id
INNER JOIN cities c2 ON cd.city2 = c2.id
WHERE cd.city1 = your_id
OR cd.city2 = your_id
ORDER BY cd.dist ASC