2012-04-06 14 views
0

Ich habe gerade eine neue GEOMETRY Spalte p und müssen Werte für alle vorhandenen Zeilen in der Tabelle füllen für p basierend auf vorhandenen Werte in cols lat und lng.Aktualisieren einer MySQL-Spaltenwerte aus anderen Spalten aus derselben Tabelle mit

Problem: eine einzelne Spalte aktualisiert mit der Abfrage unten gut funktioniert, weil ich manuell in den lat und lng Werte eingegeben haben. Aber wenn MySQL für alle Zeilen in den Tabellen die Spalte p aktualisieren soll, legt die Abfrage, die ich verwendet habe, keine Werte auf Spalte p fest. Ich denke, dass es mit der Unterabfrage (?) Zu tun hat, aber ich bin mir nicht sicher, wie es funktioniert. Vielen Dank!

Abfrage, die

UPDATE listings 
SET p = GeomFromText('POINT(39.948177 -75.174324)') 
WHERE listing_id = '585221'; 

Abfrage funktioniert, die

Added eine WHERE Klausel keinen Wert legt, so nicht, daß ich die ganze Tabelle zerstören beim Testen. Ich möchte eigentlich die UPDATE Abfrage für alle Zeilen in der Tabelle

UPDATE listings 
SET p = GeomFromText('POINT(lat lng)') 
WHERE listing_id = '585221'; 

Antwort

1

und was diese (entfernen Sie die GeomFromText Funktion)

UPDATE Listings SET p = POINT tun (lat, lng) WHERE listing_id = '585221';

oder Sie können wie diese

UPDATE Listings SET p = GeomFromText (CONCAT ('POINT (' lat,‘‘, lng, ')')) gehen;

+0

Wenn ich 'SET p = POINT (lat, lng)' die funktioniert, sollte ich ändern der Säulentyp von 'GEOMETRY' nach' POINT'? – Nyxynyx

0

Sie haben Ihre Werte verketten ein richtiges Argument zu bilden für GeomFromText: ist

UPDATE listings 
SET p = GeomFromText('POINT(' || lat || ' ' || lng || ')') 
WHERE listing_id = '585221'; 

Die Rohrführung (||) verwendet Strings verketten. Aber eine bessere Lösung ist es, die Point Funktion zu verwenden, um direkt:

UPDATE listings 
SET p = Point(lat, lng) 
WHERE listing_id = '585221'; 
0

Für SQLite/SpatiaLite ist es

UPDATE mytable SET location = GeomFromText('POINT('||latitude||" "||longitude||')'); 
Verwandte Themen