Czytałem już w promieniu i mysql i jestem bardzo zdezorientowany, jak dokładnie zaimplementować kod z wieloma zmiennymi wyszukiwania, więc może ktoś mi to zepsuje.Jak mogę użyć funkcji promienia PHP z wieloma zmiennymi?
Moja baza danych zawiera następujące tabele:
IDX | typ | cena | item_desc | s_lat | s_long | data utworzenia
Oto mój obecny kod.
$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'";
}
Wszystko znalazłem do tej pory mówi używać:
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
Ale jestem bardzo mylić, w jaki sposób zaimplementować go do $search_origin_radius
i $search_dest_radius
. Zasadniczo próbuję znaleźć wszystko, co jest na sprzedaż w przedziale cenowym i promieniu wokół dwóch miast.
Przykład Chcę znaleźć wszystko za 100 USD w Oklahoma City, OK w promieniu 200 mil i Kansas City, MO w promieniu 100 mil.
EDYCJA ** Zgodnie z sugestią dodano to jako funkcję zapisaną.
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;
}
Korzystanie nowe zapytanie, ale nadal nic nie pokazuje się:
$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
";
tak, aby funkcja cos/sin działała, ale chcesz użyć '$ search_origin_radius'? Może zdjęcie lub przykładowe dane mogą pomóc w zrozumieniu, czego chcesz. –
Nie jestem pewien, czy rozumiem, o co prosisz. Nie wiem, jak zaimplementować funkcję cos/sin do mojego bieżącego zapytania sql. – Jayce
czy możesz pokazać mi, jaki obszar cię interesuje? –