sql >> データベース >  >> RDS >> Mysql

HaversineとLaravel

    したがって、その要点にあるすべての肥大化は必要ありません。代わりに、次の式を使用できます。

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

    これは、latitudeを渡すことを前提としています およびlongitude ユーザーから。また、半径を1にしたくない場合は、3番目の引数を渡して、カスタム半径を指定できます。

    そしてもちろん、これはOfferのモデル用であると想定しています。 。必要に応じて命名規則を変更してください。



    1. SQLAlchemyを使用して2つのデータベースのテーブルを結合する

    2. コマンドラインからMySQLに接続する方法

    3. MySQL:intフィールドの値を切り替える簡単な方法

    4. pg_restoreの実行時に、ファイルヘッダーで[アーカイバ]のサポートされていないバージョン(1.13)を取得する