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
Post a Comment