Ho visto due possibili soluzioni.
Il primo:
Per ogni città memorizzare nel database la sua latitudine e longitudine; quando l'utente riceve una query, calcoli la distanza con ogni altra città e restituisci i risultati.
Il vantaggio è che puoi aggiungere ogni città in db senza la necessità di aggiungere altre informazioni.
Qui
puoi trovare formule, campioni e anche codici per il calcolo della distanza latitudine-longitudine...
Secondo:
Crea una tabella cities_dist
con tre campi:city1_id, city2_id, distance
e inserisci ogni possibile combinazione tra le tue città. Con ciò puoi scrivere una query con la città selezionata che è city1_id o city2_id.
Il vantaggio è che puoi utilizzare una query semplice senza alcun calcolo, mentre i contro sono che devi riempire questa tabella ogni volta che inserisci una nuova città nel tuo database.
MODIFICATO dopo il commento dell'utente:
Immagina di avere tre città
ID NAME
1 New York
2 Rome
3 Berlin
Quella tabella dovrebbe assomigliare a
CITY1 CITY2 DIST
1 2 1500
1 3 1200
2 3 400
Quando l'utente vuole volare da Berlino puoi usare
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