У меня возникли проблемы с пониманием того, как я пишу следующее. У меня есть одна таблица со списком широт / долгот и другая таблица со списком географических названий с широтой и долготой. Что мне нужно сделать, это:
1) Переберите все элементы в таблице 1, возьмите широту и длину, выполните поиск по радиусу в таблице 2 и выберите название места, обновите таблицу 1 новым названием места. Этот код дает мне название места, которое мне нужно:
$sql="SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(lon) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat))))
AS distance
FROM cats HAVING distance < 5 ORDER BY distance LIMIT 1";
Мне нужна помощь, чтобы выяснить, как я соединяю 2 запроса вместе, или лучший способ для меня перебрать значения lat / long из таблицы 1. Я пытался сделать это с помощью цикла php, но я не думаю, что это лучший способ, и я не смог заставить его работать
Спасибо за любую помощь или предложения!
Основываясь на вашем описании, я думаю, что вам нужно что-то вроде этого:
UPDATE table1 SET place_name = (SELECT place_name FROM
table2
WHERE (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(lon) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat)))) < 5
ORDER BY (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(lon) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat)))) DESC
LIMIT 1)
Других решений пока нет …