Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entfernung zwischen 400 Städten berechnen und MySQL dafür optimieren?

Ich habe zwei mögliche Lösungen gesehen.

Erster:
Speichern Sie für jede Stadt ihren Breiten- und Längengrad in der Datenbank; Wenn der Benutzer eine Abfrage erhält, berechnen Sie die Entfernung mit jeder anderen Stadt und geben Ergebnisse zurück.
Der Vorteil ist, dass Sie jede Stadt in DB hinzufügen können, ohne weitere Informationen hinzufügen zu müssen.
Hier Sie können auch Formeln, Beispiele und Code für die Breiten-Längen-Entfernungsberechnung finden ...

Zweitens:
Erstellen Sie eine Tabelle cities_dist mit drei Feldern:city1_id, city2_id, distance und geben Sie jede mögliche Kombination zwischen Ihren Städten ein. Damit können Sie eine Abfrage mit der ausgewählten Stadt als city1_id oder city2_id schreiben.
Pro ist, dass Sie eine einfache Abfrage ohne Berechnung verwenden können, während die Nachteile sind, dass Sie sie ausfüllen müssen diese Tabelle immer dann, wenn Sie eine neue Stadt in Ihre Datenbank einfügen.

BEARBEITET nach Benutzerkommentar:
Stellen Sie sich vor, Sie haben drei Städte

ID  NAME
1   New York
2   Rome
3   Berlin

Diese Tabelle sollte so aussehen

CITY1  CITY2  DIST
1      2      1500
1      3      1200
2      3       400

Wenn Benutzer von Berlin aus fliegen möchten, können Sie

verwenden
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