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