Mysql
 sql >> Base de données >  >> RDS >> Mysql

Calculer la distance entre 400 villes et optimiser MySQL pour cela ?

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