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

CakePHPは、データベースから最も近い緯度経度をクエリします

    ケーキ3にはこれ以上virtualFieldsはありませんが、計算フィールドのエイリアスを作成することはできます

    @ndmが提案しているように、$latitudeをバインドする方がよいでしょう。 および$longitude SQLインジェクションを防ぐために

    $distanceField = '(3959 * acos (cos ( radians(:latitude) )
        * cos( radians( Sightings.latitude ) )
        * cos( radians( Sightings.longitude )
        - radians(:longitude) )
        + sin ( radians(:latitude) )
        * sin( radians( Sightings.latitude ) )))';
    

    どこで使用するか

    $sightings = $this->Sightings->find()
        ->select([
            'distance' => $distanceField
        ])
        ->where(["$distanceField < " => $distance])
        ->bind(':latitude', $latitude, 'float')
        ->bind(':longitude', $longitude, 'float')
        ->contain(['Photos', 'Tags']);
    

    持つことを使用する

    $sightings = $this->Sightings->find()
        ->select([
            'distance' => $distanceField
        ])
        ->having(['distance < ' => $distance])
        ->bind(':latitude', $latitude, 'float')
        ->bind(':longitude', $longitude, 'float')
        ->contain(['Photos', 'Tags']);
    


    1. 毎月第n平日に繰り返されるイベント

    2. ストアドプロシージャを使用せずにn回ループする

    3. MySQL:ストアドプロシージャで複数のフィールドを複数の変数に選択する

    4. すべてのPHPプログラマーは何を知っておくべきですか?