PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak mogę sprawić, by to zapytanie SQL dotyczące odległości geograficznej było zgodne z Postgresem?

Zapytanie używa składni specyficznej dla MySql. W Postgresie (i wszystkich innych znanych mi RDBMS) powinieneś używać tabeli pochodnej:

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

Usunąłem również cudzysłowy ze stałych numerycznych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak Atan2d() działa w PostgreSQL

  2. UUID Postgresql obsługiwany przez Hibernate?

  3. Jak stworzyć użytkownika dla bazy danych w postgresql?

  4. PostgreSQL zwraca dokładną lub najbliższą datę do daty zapytania

  5. Radzenie sobie z powolnymi zapytaniami w PostgreSQL