Mysql
 sql >> база данни >  >> RDS >> Mysql

Изчисляване на разстояние между 400 града и оптимизиране на MySQL за него?

Видях две възможни решения.

Първият:
За всеки град магазин в базата данни неговата географска ширина и дължина; когато потребителят получи заявка, вие изчислявате разстоянието с всеки друг град и връщате резултати.
Професионалното е, че можете да добавите всеки град в db, без да е необходимо да добавяте друга информация.
Тук можете също да намерите формули, мостри и код за изчисляване на разстоянието географска ширина-дължина...

Второ:
Създайте таблица cities_dist с три полета:city1_id, city2_id, distance и поставете вътре всяка възможна комбинация между вашите градове. С това можете да напишете заявка с избрания град, като city1_id или city2_id.
Предишното е, че можете да използвате проста заявка без никакво изчисляване, докато минусите са, че трябва да попълните тази таблица всеки път, когато вмъкнете нов град във вашата база данни.

РЕДАКТИРАНО след потребителски коментар:
Представете си, че имате три града

ID  NAME
1   New York
2   Rome
3   Berlin

Тази таблица трябва да изглежда така

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

Когато потребителят иска да лети от Берлин, можете да използвате

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете без значение от малките букви, като използвате mysql, php и pdo

  2. Как да се свържете от командния ред на Windows към командния ред на mysql

  3. Дата и време е равна или по-голяма от тази днес в MySQL

  4. Python:ModuleNotFoundError:Няма име на модул 'mysql'

  5. Основна грешка на Entity Framework:Възникна грешка при използването на връзката към база данни '' на сървър 'localhost'