2012-04-06 3 views
0

Я только что создал новый GEOMETRY столбец p и нужно заполнить значения для всех существующих строк в таблице для p на основе существующих значений в перевалах lat и lng.Обновление столбца MySQL с использованием значений из других столбцов из тех же таблиц

Проблема: Обновление одного столбца с помощью запроса ниже работает хорошо, потому что я набрал в значениях lat и lng вручную. Но когда я хочу, чтобы MySQL обновлял col p для всех строк в таблицах, используемый мной запрос не устанавливает никаких значений в col p. Я думаю, что это связано с суб-запросом (?), Но я не уверен, как заставить его работать правильно. Благодаря!

запросов, который работает

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

запроса, который не устанавливает никакой ценности

Добавлен пункт WHERE поэтому я не уничтожить всю таблицу во время тестирования. Я на самом деле хочу сделать UPDATE запрос для всех строк в таблице

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

ответ

1

и что об этом (удалить функцию GeomFromText)

UPDATE объявления SET р = POINT (лат, LNG) WHERE listing_id = '585221';

или вы можете пойти, как этот

UPDATE объявления SET р = GeomFromText (CONCAT ('POINT (', лат,»», LNG, ')'));

+0

Если я использую 'SET р = POINT (лат, LNG)', который работает, я должен изменить тип столбца от 'GEOMETRY' до' POINT'? – Nyxynyx

0

Вы должны объединить свои ценности, чтобы сформировать правильный аргумент для GeomFromText:

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

Оператор трубы (||) используется для конкатенации строк. Но лучшим решением является использование Point функции непосредственно:

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

Для SQLite/SpatiaLite это

UPDATE mytable SET location = GeomFromText('POINT('||latitude||" "||longitude||')'); 
Смежные вопросы