Widziałem dwa możliwe rozwiązania.
Pierwszy:
Dla każdego miasta zapisuje w bazie jego szerokość i długość geograficzną; gdy użytkownik otrzyma zapytanie, obliczasz odległość z każdym innym miastem i zwracasz wyniki.
Zaletą jest to, że możesz dodać każde miasto w bazie danych bez konieczności dodawania innych informacji.
Tu
możesz znaleźć wzory, próbki i kod do obliczania odległości między szerokością geograficzną i długością geograficzną...
Po drugie:
Utwórz tabelę cities_dist
z trzema polami:city1_id, city2_id, distance
i umieść w niej każdą możliwą kombinację spośród swoich miast.Dzięki temu możesz napisać zapytanie z wybranym miastem o nazwie city1_id lub city2_id.
Zaletą jest to, że możesz użyć prostego zapytania bez żadnych obliczeń, a wady są to, że musisz je wypełnić tę tabelę za każdym razem, gdy wstawiasz nowe miasto do swojej bazy danych.
EDYTOWANO po komentarzu użytkownika:
Wyobraź sobie, że masz trzy miasta
ID NAME
1 New York
2 Rome
3 Berlin
Ten stół powinien wyglądać jak
CITY1 CITY2 DIST
1 2 1500
1 3 1200
2 3 400
Gdy użytkownik chce lecieć z Berlina, możesz użyć
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