Previously I used this code & query to find location within some miles of radius, But it seems like it does not give proper result.
$zip = $r['zip'];
$lat1 = number_format((float)$r['latitude'],8,'.','');
$lon1 = number_format((float)$r['longitude'],8,'.','');
$d = $miles;
$r = 3959;
//compute max and min latitudes / longitudes for search square
$latN = number_format((float)rad2deg(asin(sin(deg2rad($lat1)) * cos($d / $r) + cos(deg2rad($lat1)) * sin($d / $r) * cos(deg2rad(0)))),7,'.','');
$latS = number_format((float)rad2deg(asin(sin(deg2rad($lat1)) * cos($d / $r) + cos(deg2rad($lat1)) * sin($d / $r) * cos(deg2rad(180)))),7,'.','');
$lonE = number_format((float)rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(90)) * sin($d / $r) * cos(deg2rad($lat1)), cos($d / $r) - sin(deg2rad($lat1)) * sin(deg2rad($latN)))),7,'.','');
$lonW = number_format((float)rad2deg(deg2rad($lon1) + atan2(sin(deg2rad(270)) * sin($d / $r) * cos(deg2rad($lat1)), cos($d / $r) - sin(deg2rad($lat1)) * sin(deg2rad($latN)))),7,'.','');
$rs = "SELECT * FROM loc WHERE (latitude <= $latN AND latitude >= $latS AND longitude <= $lonE AND longitude >= $lonW) OR zip= '$szip' OR city = '$scity' OR state = '$scity'";
Now I changed this code to below code:
$zip = $r['zip'];
$lat1 = number_format((float)$r['latitude'],8,'.','');
$lon1 = number_format((float)$r['longitude'],8,'.','');
$d = $miles;
$rs = "SELECT zip, latitude, longitude,( 3959 * acos( cos( radians(".$lat1.") ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(".$lon1.") ) + sin( radians(".$lat1.") ) * sin( radians( latitude ) ) ) ) AS distance FROM stores HAVING distance < $distance ORDER BY distance";
But it works only in local, in my live website it gives blank result. what is issue? & can any one suggest me good way to find location within some miles of radius?