J'ai vu deux solutions possibles.
Premier :
Pour chaque ville stocke dans la base de données sa latitude et sa longitude ; lorsque l'utilisateur reçoit une requête, vous calculez la distance avec toutes les autres villes et renvoyez les résultats.
Pro est que vous pouvez ajouter chaque ville dans la base de données sans avoir besoin d'ajouter d'autres informations.
ici
vous pouvez également trouver des formules, des exemples et du code pour calculer la distance latitude-longitude...
Deuxième :
Créer une table cities_dist
avec trois champs :city1_id, city2_id, distance
et mettre à l'intérieur toutes les combinaisons possibles parmi vos villes.Avec cela, vous pouvez écrire une requête avec la ville sélectionnée étant city1_id ou city2_id.
L'avantage est que vous pouvez utiliser une requête simple sans aucun calcul, tandis que les inconvénients sont que vous devez remplir cette table chaque fois que vous insérez une nouvelle ville dans votre base de données.
MODIFIÉ après le commentaire de l'utilisateur :
Imaginez que vous avez trois villes
ID NAME
1 New York
2 Rome
3 Berlin
Ce tableau devrait ressembler à
CITY1 CITY2 DIST
1 2 1500
1 3 1200
2 3 400
Lorsque l'utilisateur veut voler de Berlin, vous pouvez utiliser
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