sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo hacer que esta consulta SQL de distancia geográfica sea compatible con Postgres?

La consulta utiliza la sintaxis específica de MySql. En Postgres (y todos los demás RDBMS conocidos por mí) debe usar una tabla derivada:

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

También eliminé las comillas de las constantes numéricas.