Mysql
 sql >> Database >  >> RDS >> Mysql

Calcolare la distanza tra 400 città e ottimizzare MySQL per questo?

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