mysql - PHP latitude and longitude radius -


i make service give nearby location of driver passenger.

is query working? search nearby location radius of passenger?

i put latitude , longitude number.

can guys verify or explain me?

select  b.id, b.name, b.latitude, b.longitude    passenger join    driver b on      acos(cos(radians(a.latitude)) * cos(radians(b.latitude)) * cos(radians(b.longitude) - radians(a.longitude)) + sin(radians(a.latitude)) * sin(radians(b.latitude))) <= 10 / 6371.0   a.latitude = 3.2046532 , a.longitude = 101.7808791 

<?php error_reporting(e_error | e_parse); error_reporting(e_all); ini_set('display_errors', '0'); include ("conn.php");  $latitude1 = 3.2046532; $longitude1 = 101.7808791;  $stmt = $dbi->prepare("select b.id, b.name, b.latitude, b.longitude                 passenger                 join driver b                 on acos(cos(radians(a.latitude)) * cos(radians(b.latitude)) * cos(radians(b.longitude) - radians(a.longitude)) + sin(radians(a.latitude)) * sin(radians(b.latitude))) <= 10 / 6371.0                   a.latitude = ? , a.longitude = ?"); $stmt->bind_param('ss', $latitude1,$longitude1);  mysqli_stmt_execute($stmt) or die (mysqli_error()); mysqli_stmt_store_result($stmt) or die (mysqli_error()); mysqli_stmt_num_rows($stmt); $stmt->bind_result($newid, $newname, $latitude2, $longitude2); $stmt->fetch(); $stmt->close();  echo $newname.'<br>'; echo $latitude2.'<br>'; echo $longitude2.'<br>';  ?> 

your sql query this:

$stmt = $dbi->prepare("select id, name, latitude, longitude,                 (acos(cos(radians(?)) * cos(radians(b.latitude)) * cos(radians(b.longitude) - radians(?)) + sin(radians(?)) * sin(radians(b.latitude)))) distance                  driver                   distance <= 10/6371.0"); $stmt->bind_param('sss', $latitude1,$longitude1,$latitude1);  

explanation:
in above query i'm calculating distance of driver passenger distance , selecting drivers in 10 km area.
in distance <= 10/6371 statement, 6371 used value of radius of earth in kms. 3956 can used in place of 6371 if want calculate distance in miles, 3956 earth's radius in miles.
more information regarding can found here.
if want retrieve passengers details well, use different query instead of join, must having passenger's primary key since he's 1 requesting driver's lists.

update:

$stmt = $dbi->prepare("select id, name, latitude, longitude,             6371 * (acos(cos(radians(?)) * cos(radians(b.latitude)) * cos(radians(b.longitude) - radians(?)) + sin(radians(?)) * sin(radians(b.latitude)))) distance                 driver             having distance <= 10             order distance asc");     $stmt->bind_param('sss', $latitude1,$longitude1,$latitude1); 

Comments