Я видел два возможных решения.
Первый:
Для каждого магазина города в базе данных указаны его широта и долгота;когда пользователь получает запрос, вы вычисляете расстояние с каждым другим городом и возвращаете результаты.
Pro - вы можете добавить каждый город в дБ без необходимости добавлять другую информацию.
Здесь вы можете найтиформулы, образцы и код тоже для вычисления расстояния широта-долгота ...
Секунда:
Создайте таблицу 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