Нижеприведенный запрос находится в пределах цикла (в PHP), который принимает значения по широте, долготе и идентификатору из трех разных массивов. Для каждой позиции/ключа в массиве ближайшая географическая точка выбирается из таблицы, используя запрос ниже.Как использовать один запрос Mysql вместо запроса внутри цикла массива?
Поскольку размер массива обычно составляет около 500, так что 500 наборов входов, для которых нужно найти ближайшее географическое положение, требуется некоторое время.
Мой вопрос: Можно ли использовать один запрос с использованием входных массивов из php одновременно и выбрав набор всех ближайших географических позиций для каждого ключа массива?
$sql="SELECT
id, d, tolon, tolat, du,
(3959 * acos(cos(radians($lat1))
* cos(radians(travel.tolat))
* cos(radians(travel.tolon) - radians($lon1))
+ sin(radians($lat1))
* sin(radians(travel.tolat)))) AS distance
FROM travel
WHERE userid = $id AND tolon > $lonlow AND tolon < $lonhigh AND tolat > $latlow AND tolat < $lathigh
having distance < $maxdistance ORDER BY distance
";
Худший вариант решения будет UNION, но кто-то опубликует лучшую идею. Вы пробовали ..OR .. –
Я бы попытался вставить массив в временную таблицу, а затем можно было бы использовать регулярное соединение. По крайней мере, это отправная точка – ingo
@ ingo Хорошо, что с ними связано нелегко, поскольку соединение определяется минимальным расстоянием между географическими координатами в двух таблицах, которые вычисляются по формуле. – BastiaanWW