sql >> Database >  >> RDS >> Mysql

Hoe krijg je een lijst met buitenwijken rond een locatie en herhaal je deze voor andere locaties met MySql?

Je hoeft alleen maar een self-join uit te voeren. Deelnemen tabellen is een zeer fundamenteel onderdeel van SQL - u echt zou het moeten lezen voordat u dit antwoord verder probeert te begrijpen.

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

Bekijk het op sqlfiddle .

Het zal je zijn opgevallen dat ik MySQL's IN() operator als afkorting voor value = A OR value = B OR ... .

Het zal je ook zijn opgevallen dat ik MySQL's DEGREES() en RADIANS() functies in plaats van dergelijke conversies expliciet uit te voeren.

U vermenigvuldigde toen de breedtegraad met een factor 1.851999999962112 , wat nogal vreemd was:het is extreem dicht bij 1.852 , wat het exacte aantal kilometers in een zeemijl is (historisch gedefinieerd als een minuut breedtegraad), maar toch bizar iets anders - ik nam aan dat je dat in plaats daarvan wilde gebruiken.

Ten slotte had je de letterlijke waarde waarmee je de afstanden in de resultatenset filterde als een string, d.w.z. '60' , terwijl dit uiteraard een numerieke waarde is en niet aangehaald mag worden.



  1. GROUP BY-gedrag wanneer er geen aggregatiefuncties aanwezig zijn in de SELECT-component

  2. Geneste opmerkingen in PHP &MySQL

  3. Hoe de compatibiliteit van SQL Server-database controleren nadat sp_dbcmptlevel is verouderd?

  4. schrijf resultaten van sql-query naar een bestand in mysql