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

Как да получите списък с предградия около местоположение, след което да повторите за други местоположения, като използвате MySql?

Просто трябва да извършите самостоятелно присъединяване. Присъединяване таблици е много основна част от SQL – вие наистина трябва да го прочетете, преди да се опитате да разберете този отговор допълнително.

SELECT   poi.asciiname,
         suburb.asciiname,
         suburb.country,
         DEGREES(
           ACOS(
             SIN(RADIANS(   poi.latitude))
           * SIN(RADIANS(suburb.latitude))
           + COS(RADIANS(   poi.latitude))
           * COS(RADIANS(suburb.latitude))
           * COS(RADIANS(poi.longitude - suburb.longitude))
           )
         ) * 60 * 1.852 AS distance
FROM     geoname AS poi
    JOIN geoname AS suburb
WHERE    poi.asciiname IN ('Tamworth', 'Birmingham', 'Roanoke')
     AND poi.population > 0
     AND poi.fcode = 'PPL'
     AND suburb.fcode IN ('PPLX', 'PPPL')
HAVING   distance <= 60
ORDER BY poi.asciiname, distance

Вижте го на sqlfiddle .

Ще сте забелязали, че използвах IN() оператор като съкращаване на value = A OR value = B OR ... .

Също така ще сте забелязали, че съм използвал DEGREES() и RADIANS() функции, вместо да се опитват да извършват такива преобразувания изрично.

След това умножавахте минутите географска ширина с коефициент 1.851999999962112 , което беше доста странно:той е изключително близо до 1.852 , което е точният брой километри в морска миля (исторически дефиниран като минута на географска ширина), но все пак странно малко по-различен — Предполагам, че сте имали предвид да го използвате вместо това.

И накрая, имахте литералната стойност, по която филтрирате разстоянията в набора от резултати като низ, т.е. '60' , докато очевидно това е числова стойност и не трябва да се цитира.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изчислете децил в MySQL въз основа на суми

  2. Какво е максималното допустимо за group_concat_max_len в MySQL?

  3. Присъединете две таблици (с връзка 1-M), където втората таблица трябва да бъде „сплескана“ в един ред

  4. MySQL:изберете * от таблицата, където col IN (null, ) е възможно без ИЛИ

  5. получите грешка .findOrCreate().