Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Haversine i Laravel

Więc nie potrzebujesz całego wzdęcia, które jest w tym sednie, zamiast tego możesz użyć następujących formuł:

public function get_offers_near($latitude, $longitude, $radius = 1){

    $offers = Offer::select('offers.*')
        ->selectRaw('( 3959 * acos( cos( radians(?) ) *
                           cos( radians( offer_lat ) )
                           * cos( radians( offer_long ) - radians(?)
                           ) + sin( radians(?) ) *
                           sin( radians( offer_lat ) ) )
                         ) AS distance', [$latitude, $longitude, $latitude])
        ->havingRaw("distance < ?", [$radius])
        ->get();

    return $offers;
}

Zakłada się, że przechodzisz w latitude i longitude od użytkownika. Ponadto, jeśli nie chcesz, aby promień wynosił 1, możesz przekazać trzeci argument i podać własny promień.

I oczywiście zakładamy, że dotyczy to modelu Offer . W razie potrzeby zmień konwencję nazewnictwa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dzielenie wartości mysql na nieznaną liczbę części

  2. Jak połączyć się ze zdalną bazą danych MySQL za pomocą Javy?

  3. Wady przechowywania obrazów w bazie danych?

  4. Czy istnieje mechanizm wyłączający wstawianie do stołu?

  5. Czy powinienem używać jednej dużej instrukcji SQL Select, czy kilku małych?