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

この地理距離SQLクエリをPostgresと互換性を持たせるにはどうすればよいですか?

    クエリはMySqlに固有の構文を使用します。 Postgres(および私が知っている他のすべてのRDBMS)では、派生テーブルを使用する必要があります:

    select *
    from (
        select *, 
            (3959 * acos( cos( radians(53.49) ) * cos( radians( places.lat ) ) 
            * cos( radians( places.lng ) - radians(-2.38) ) 
            + sin( radians(53.49) ) * sin( radians( places.lat ) ) ) ) AS distance 
        from (
            select *
            from places
            where places.lat between 53.475527714192 and 53.504472285808
            and places.lng between -2.4043246788967 and -2.3556753211033
            ) as places 
        where places.deleted_at is null 
        ) sub
    where distance <= $1 
    order by distance asc
    

    数値定数から引用符も削除しました。



    1. Doctrine2:少なくとも1つのルートエンティティエイリアスを選択せず​​に、識別変数を介してエンティティを選択することはできません

    2. 2つの列(同じテーブル)の値を対角線で一致させ、一致しない場合に結果を表示する方法

    3. Windows認証ユーザーとしてOLEDBプロバイダーエラーのインスタンスを作成できません

    4. DBMSの最大行