Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на клауза WHERE за намиране на POI в обхват на разстояние от дължина и ширина

Проблемът е, че не можете да препратите към колона с псевдоним (distance в този случай) в select или where клауза. Например, не можете да направите това:

select a, b, a + b as NewCol, NewCol + 1 as AnotherCol from table
where NewCol = 2

Това ще се провали и в двете:select изявление при опит за обработка на NewCol + 1 а също и в where изявление при опит за обработка на NewCol = 2 .

Има два начина за решаване на това:

1) Заменете референцията със самата изчислена стойност. Пример:

select a, b, a + b as NewCol, a + b + 1 as AnotherCol from table
where  a + b = 2

2) Използвайте външен select изявление:

select a, b, NewCol, NewCol + 1 as AnotherCol from (
    select a, b, a + b as NewCol from table
) as S
where NewCol = 2

Сега, като се има предвид вашата ОГРОМНА и не много удобна за хората изчислена колона :) Мисля, че трябва да изберете последната опция за подобряване на четливостта:

SET @orig_lat=55.4058;  
SET @orig_lon=13.7907; 
SET @dist=10;

SELECT * FROM (
  SELECT 
    *, 
    3956 * 2 * ASIN(SQRT(POWER(SIN((@orig_lat -abs(latitude)) * pi()/180 / 2), 2) 
    + COS(@orig_lat * pi()/180 ) * COS(abs(latitude) * pi()/180) 
    * POWER(SIN((@orig_lon - longitude) * pi()/180 / 2), 2) )) as distance 
  FROM geo_kulplex.sweden_bobo
) AS S
WHERE distance < @dist
ORDER BY distance limit 10;

Редактиране: Както @Kaii спомена по-долу, това ще доведе до пълно сканиране на таблицата. В зависимост от количеството данни, които ще обработвате, може да искате да избегнете това и да изберете първата опция, която трябва да работи по-бързо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. лош аргумент №1 за 'ipairs' (очаква се таблица, получи булева)

  2. Функция MySQL SIGN() – Разберете дали числото е положително или отрицателно в MySQL

  3. Как работи NOT RLIKE в MySQL

  4. Как да конвертирате времето в часовата зона на iPhone устройството?

  5. Изтриване на редове с MySQL LEFT JOIN