2016-03-31 17 views
0

Ich habe 2 Tabellen:Mysql UPDATE Tabelle mit nächstgelegenen Standort

-Städte (id, name, city_latitude, city_longitude, STATION_ID)

-Stationen (id, name, station_latitude, station_longitude)

ich mag cities.station_id mit der ID der nächsten Station aktualisieren, innerhalb der Grenze von 30 km

im Moment kann ich nur dieses Ziel zu erreichen:

UPDATE cities C, staions S 
SET C.station_id = S.id 
WHERE (((acos(sin((S.station_latitude*pi()/180)) * sin((city_latitude*pi()/180)) + cos((S.station_latitude *pi()/180)) * cos((city_latitude*pi()/180)) * cos(((S.station_longitude - city_longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) < 30 

Diese Abfrage aktualisiert die cities.station_id mit zufälligen stations.id in weniger als 30 km. Aber ich möchte wirklich die nächste, die nicht über 30 km ist Ich habe versucht, ohne Erfolg "GROUP BY", "LIMIT" oder "MIN", aber ich habe Syntaxfehler. Vielen Dank im Voraus.

+2

Für jede Stadt innerhalb 30 km von einer Station, sind Sie in der Lage, die nächste Station für die Stadt zu wählen? – Strawberry

Antwort

1

Vielleicht versuchen Sie so etwas.

JOIN auf einem subselect, die die WHERE als ASC bestellt, und LIMIT 1.

UPDATE cities c 
JOIN (
     SELECT id 
     FROM station s    
     ORDER BY (((acos(sin((S.station_latitude*pi()/180)) * sin((c.city_latitude*pi()/180)) + cos((S.station_latitude *pi()/180)) * cos((c.city_latitude*pi()/180)) * cos(((S.station_longitude - c.city_longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) ASC   
     LIMIT 1) s 
SET c.station_id=s.id 
+0

Diese Abfrage funktioniert nicht in SQL Fiddle –