Я искал решение для запроса, который я пытаюсь запустить. У меня есть таблица базы данных, называемая местоположениями, и мне нужно, чтобы пользователь мог отправить форму для изменения/фильтрации возвращаемых результатов.
Пользователь может выбрать два поля: благотворительность и расстояние. Эти поля не являются обязательными, поэтому необходимо проверить, заданы ли они.
В настоящее время я работаю с расстоянием, но не могу заставить его работать, когда оба заполнены с помощью AND WHERE
вот моя функция контроллера
public function search(Request $request)
{
$circle_radius = 3959;
$max_distance = $request->Input(['distance']);
$charity = $request->Input(['charities']);
$lat = '53.5526';
$lng = '-1.479726';
$locations = DB::select(
'SELECT * FROM
(SELECT *, (' . $circle_radius . ' * acos(cos(radians(' . $lat . ')) * cos(radians(latitude)) *
cos(radians(longitude) - radians(' . $lng . ')) +
sin(radians(' . $lat . ')) * sin(radians(latitude))))
AS distance
FROM locations) AS distances
WHERE distance < ' . $max_distance . '
AND charity = ' . $charity . '
ORDER BY distance;
');
return view('map.search', compact('locations'));
}
Если я возьму благотворительную линию AND, она работает только с расстоянием, но мне нужно и то, и другое.