2015-01-31 3 views
1

Я использую алгоритм Google для нахождения места рядом на основе координат в моем PHP скрипт:MySQL запросов работает с командной строки MySQL, но не MySQLi

if ($requestType == "closestPeers") { 
    $clientsCoordinates = mysqli_fetch_row(mysqli_query($connection,"SELECT latest_latitude,latest_longitude FROM Assets WHERE username='{$username}'")); 
    $longitude = $clientsCoordinates[0]; 
    $latitude = $clientsCoordinates[1]; 
    $miles = 0.0568182; /* 300 Feet, a bit larger than average Midtown Manhattan blocks */ 
    $closestUsersQuery = "SELECT *, 
          (3959 * acos(cos(radians('$latitude')) * 
          cos(radians(latest_latitude)) * 
          cos(radians(latest_longitude) - 
          radians('$longitude')) + 
          sin(radians('$latitude')) * 
          sin(radians(latest_latitude)))) 
          AS distance FROM Assets HAVING distance < '$miles' ORDER BY distance ASC LIMIT 0, 5"; 
    $closestUsers = mysqli_fetch_all(mysqli_query($connection,$closestUsersQuery)); 
    foreach ($closestUsers as $nearbyUser) { 
     $responseArray[$nearbyUser[1]] = $nearbyUser[4]; 
    } 
} else if ($requestType == "cellImage") { 

Но дело в том, что этот запрос не будет работать для любой причины. Я могу позвонить mysqli_num_rows() по этому адресу mysqli_query(), и я увижу 10, но когда я использую этот запрос, мне присваивается пустой массив.

Однако, я мог бы установить $closestUserQuery = "SELECT * FROM Assets" Мне задан массив со всеми строками, который, очевидно, очень неэффективен и, безусловно, непригоден для этого конкретного приложения. Я мог бы также вызвать запрос, предоставленный Google в интерфейсе командной строки MySQL, и мне дали именно то, что я ищу - результаты из базы данных поблизости.

Эти столбцы для моей Assets таблице: enter image description here

+1

Должен ли сначала $ lat в запросе быть $ широта? Вы должны рассмотреть вопрос об обработке ошибок по всему коду доступа к базе данных. Вы не получаете бонусных очков за то, что вы набрали столько команд в одну строку кода, насколько это возможно. –

+0

Да, это должно! Сейчас я отредактирую это. – IIllIIll

+0

Я никогда не был новым, вы могли бы сделать «HAVING» без «GROUP BY». Вы пытались вставить все это в VIEW и запросить его? – terary

ответ

0

Видимо 0.0568182 миль было слишком мало, или что-то. Если бы я должен был установить это немного выше, то запрос запускался, но это не складывалось, потому что оно возвращало результаты в командной строке MySQL в 0.0568182 миль. Спасибо за чтение и помощь!

Смежные вопросы