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

Beregner afstand mellem 400 byer og optimerer MySQL til det?

Jeg så to mulige løsninger.

Den første:
For hver by gemmer i database dens bredde- og længdegrad; når brugeren får en forespørgsel, beregner du afstand med hver anden by og returnerer resultater.
Fordelen er, at du kan tilføje hver by i db uden at skulle tilføje anden info.
Her du kan også finde formler, eksempler og kode til afstandsberegning af breddegrad-længdegrad...

For det andet:
Opret en tabel cities_dist med tre felter:city1_id, city2_id, distance og indsæt alle mulige kombinationer blandt dine byer. Med det kan du skrive en forespørgsel med valgt by, der er city1_id eller city2_id.
Profit er, at du kan bruge en simpel forespørgsel uden nogen beregning, mens ulemperne er, at du skal udfylde denne tabel, når som helst du indsætter en ny by i din database.

REDIGERT efter brugerkommentar:
Forestil dig, at du har tre byer

ID  NAME
1   New York
2   Rome
3   Berlin

Den tabel skulle se ud

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

Når brugeren ønsker at flyve fra Berlin kan du bruge

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. Hvordan passerer man den nuværende rækkeværdi i modal?

  2. Giv valg på alle borde, der ejes af en bestemt bruger

  3. Strategier til at håndtere konstant skiftende krav til MySQL-skemaer?

  4. FEJL:Fejl 1005:Kan ikke oprette tabel (fejlnr.:121)