Задача: найти ближайший бар, где подают напитки, которые я ищу.
Здесь вы можете найти сгенерированный код MySQL http://pastebin.com/5Uc2ewUW.
Запрос API, который взаимодействует с этой проблемой, будет иметь следующие параметры
query, String, ideally the drink name
lng, double, the starting longitude
lat, double, the starting latitude
range, integer, max distance in meters (with a default value)
Параметр запроса может выбрать более одного напитка (подумайте о поиске «Водка»).
Какой была бы хорошая стратегия для написания SQL-запроса с хорошей производительностью?
Я не очень эксперт, но моя идея состоит в том, чтобы
- ВЫБЕРИТЕ бары в диапазоне
- ВЫБЕРИТЕ из drink__bars, где bar_id находится в предыдущем результате выбора
- ПРИСОЕДИНЯЙТЕСЬ к таблице напитков, чтобы получить данные о напитках
Как установить порядок в зависимости от расстояния?
Любое предложение приветствуется!
Изменить: спасибо за ответы до сих пор, но они в основном сосредоточены на расчете расстояния, и это покрыто. Я не понимаю, как заказать результат (то есть напитки) на основе расстояния от баров.
Подумайте, как этот мета-запрос
SELECT drink.id, drink.name
FROM $DATA_POOL
WHERE drink.name LIKE '%MY_QUERY%'
ORDER BY $ORDER
куда
$DATA_POOL
= подмножество напитков, которые есть в барах рядом со мной (я уже могу вычислить, какие бары рядом со мной)$ORDER
= расстояние, которое у меня есть от бара, на основе параметров APIlng
иlat