Добавление функции PHP в запрос MySQL - PullRequest
0 голосов
/ 04 мая 2018

У меня 2 вопроса к этому запросу.

$query = mysql_query($con, "SELECT id, ".calcDistance($mLat, $mLng, ."lat"., ."lng".)." as distnc FROM users WHERE fName LIKE '%".$search."%' OR lName LIKE '%".$search."%' ORDER BY distnc");

Теперь, прежде чем я продолжу вопросы, позвольте мне объяснить мои variables и functions.

calcDistance() - это функция, которая возвращает расстояние от 2 широт и долготы, фактически широту и долготу вошедшего в систему пользователя и другого пользователя. И переданные параметры являются logged in user latitude, logged in user longitude, second user latitude и second user longitude.

$mLat - переменная для зарегистрированной пользовательской широты

$mLng - переменная для долготы пользователя, вошедшего в систему

lat и lng - это имена столбцов в таблице базы данных MySQL, называемые users.

Теперь моя основная цель - показать искомый результат, упорядочив его по ближайшему пользователю по поисковому слову. По этой причине я использую в запросе функцию calcDistance().

ПЕРВЫЙ ВОПРОС

Когда я запускаю этот запрос, я получаю Parse error: syntax error, unexpected '.'. Я не знаю, почему я получаю эту ошибку.

ВТОРОЙ ВОПРОС

Я пытался передать числа напрямую в качестве параметров, чтобы избежать ошибки, полученной в первом вопросе. Но я все еще получаю еще одну ошибку Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given.

Моя цель - заказать поиск пользователя по ближайшему пользователю. Использование calcDistance() возвращает расстояние между зарегистрированным пользователем и другим пользователем, как я уже сказал.

Столбцы lat и lng - это столбцы, в которых сохраняются широта и долгота каждого пользователя

1 Ответ

0 голосов
/ 05 мая 2018

И после некоторого исследования, я иду мой ответ здесь https://gist.github.com/statickidz/8a2f0ce3bca9badbf34970b958ef8479

МЕТОД 1

Это должно примерно отсортировать элементы по расстоянию в MySQL и работать в SQLite. Если вам нужно отсортировать их более точно, вы можете попробовать использовать теорему Пифагора (a ^ 2 + b ^ 2 = c ^ 2), чтобы получить точное расстояние.

SELECT * FROM table ORDER BY ((lat-$user_lat)*(lat-$user_lat)) + ((lng - $user_lng)*(lng - $user_lng)) ASC

МЕТОД 2

SELECT id, (6371 * acos (cos ( radians($user_lat) )* cos(radians( lat ) ) * cos( radians( lng ) - radians($user_lng)) + sin ( radians($user_lat) ) * sin( radians( lat ) ))) AS distance FROM table HAVING distance < 30 ORDER BY distance LIMIT 0 , 20;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...