Видях две възможни решения.
Първият:
За всеки град магазин в базата данни неговата географска ширина и дължина; когато потребителят получи заявка, вие изчислявате разстоянието с всеки друг град и връщате резултати.
Професионалното е, че можете да добавите всеки град в 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