sql >> Database >  >> RDS >> Mysql

Afstand berekenen tussen 400 steden en MySQL daarvoor optimaliseren?

Ik zag twee mogelijke oplossingen.

Eerste:
Voor elke stadswinkel in de database zijn breedte- en lengtegraad; wanneer de gebruiker een zoekopdracht krijgt, berekent u de afstand met elke andere stad en retourneert u resultaten.
Pro is dat u elke stad in db kunt toevoegen zonder dat u andere informatie hoeft toe te voegen.
Hier je kunt ook formules, voorbeelden en code vinden voor het berekenen van de lengte- en breedtegraad...

Tweede:
Maak een tabel cities_dist met drie velden:city1_id, city2_id, distance en plaats elke mogelijke combinatie tussen uw steden. Hiermee kunt u een zoekopdracht schrijven met de geselecteerde stad, namelijk city1_id of city2_id.
Pro is dat u een eenvoudige zoekopdracht kunt gebruiken zonder enige berekening, terwijl de nadelen zijn dat u deze moet invullen deze tabel telkens wanneer u een nieuwe stad in uw database invoegt.

BEWERKT na gebruikersopmerking:
Stel je voor dat je drie steden hebt

ID  NAME
1   New York
2   Rome
3   Berlin

Die tabel zou er zo uit moeten zien

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

Wanneer de gebruiker vanuit Berlijn wil vliegen, kunt u

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


  1. Hoe een willekeurige sub-tekenreeks te selecteren, gescheiden door coma(,) Van een tekenreeks

  2. MySQL:datumbereik uitbreiden naar nieuwe rijen

  3. kunnen we een externe sleutel hebben die geen primaire sleutel is in een andere tabel?

  4. SQL_NO_CACHE werkt niet