I read in radius and mysql, and I'm very confused about how to accurately implement code with multiple search variables, so can someone break it for me.
My database has the following tables:
idx | type | price | item_desc | s_lat | s_long | date of creation
Here is my current code.
$search_origin_radius = "200"; $search_dest_radius = "100"; $search_origin_lat = "37.2629742"; $search_origin_long = "-98.286158"; $search_dest_lat = "37.2629742"; $search_dest_long = "-98.286158"; $type = "consumers"; $price = "100"; $sql = "SELECT * FROM products WHERE `price` = '$price'"; if($type && !empty($type)) { $sql .= " AND `type` = '$type'"; }
All I have found so far says:
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-122) ) + sin( radians(37) ) * sin(radians(lat)) ) ) AS distance FROM myTable HAVING distance < 50 ORDER BY distance
But I'm confused by the way I implement it for $search_origin_radius
and $search_dest_radius
. Basically, what I'm trying to do is find everything that sells in the price range and radius around two cities.
Example. I want to find everything that costs $ 100 around Oklahoma City, OK within 200 miles and Kansas City, Missouri, within 100 miles.
EDIT ** As suggested, this is added as a stored function.
function Calc_Distance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 3959) { // convert from degrees to radians $latFrom = deg2rad($latitudeFrom); $lonFrom = deg2rad($longitudeFrom); $latTo = deg2rad($latitudeTo); $lonTo = deg2rad($longitudeTo); $latDelta = $latTo - $latFrom; $lonDelta = $lonTo - $lonFrom; $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2))); return $angle * $earthRadius; }
Using a new query but nothing is displayed:
$sql = " SELECT * FROM products WHERE Calc_Distance(s_lat, s_long, $search_origin_lat, $search_origin_long) < 200 AND Calc_Distance(s_lat, s_long, $search_dest_lat, $search_dest_long) < 100 AND price = $price ";