Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Haversine và Laravel

Vì vậy, bạn không cần tất cả những gì có trong ý chính đó, thay vào đó, bạn có thể sử dụng các công thức sau:

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;
}

Điều này giả định rằng bạn vượt qua latitudelongitude từ người dùng của bạn. Ngoài ra, nếu bạn không muốn bán kính là 1, bạn có thể chuyển vào đối số thứ 3 và cung cấp bán kính tùy chỉnh.

Và tất nhiên, chúng tôi giả định rằng điều này dành cho mô hình Offer . Thay đổi quy ước đặt tên của bạn nếu cần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Một truy vấn SQL để chọn cho đến khi SUM (users_count) đạt đến 1000

  2. ImportError:Không có mô-đun nào có tên flask.ext.mysql

  3. cách chuyển đổi varchar sang định dạng datetime trong mysql

  4. MySQL Visual Studio Không thể tạo cửa sổ thiết kế cho đối tượng đã chọn

  5. LOAD DATA LOCAL INFILE không hoạt động từ php 5.5 bằng cách sử dụng PDO