2012-04-06 5 views
0

Je viens de créer une nouvelle colonne GEOMETRYp et doivent remplir des valeurs pour toutes les lignes existantes dans le tableau pour p fondé sur des valeurs existantes dans lat et lng Col..Mise à jour une colonne MySQL en utilisant des valeurs d'autres colonnes de la même table

Problème: Mise à jour une seule colonne à l'aide de la requête ci-dessous fonctionne bien parce que je tapais dans les lat et lng valeurs manuellement. Mais quand je veux que MySQL mette à jour la colonne p pour toutes les lignes des tables, la requête que j'ai utilisée ne donne aucune valeur au col p. Je pense que cela a à voir avec la sous-requête (?), Mais je ne suis pas sûr de savoir comment le faire fonctionner correctement. Merci!

requête qui fonctionne

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

requête qui définit aucune valeur

ajouté une clause WHERE donc je ne détruire toute la table lors du test. Je veux vraiment faire la requête UPDATE pour toutes les lignes de la table

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

Répondre

1

et que sur ce (supprimer la fonction de GeomFromText)

listes UPDATE SET p = POINT (lat, lng) OÙ listing_id = '585221';

ou vous pouvez aller comme ça

listes SET UPDATE p = GeomFromText (CONCAT ('POINT (', latitude, » », lng, ')'));

+0

Si j'utilise 'SET p = POINT (lat, lng)' qui fonctionne, devrais-je changer le type de colonne de 'GEOMETRY' à' POINT'? – Nyxynyx

0

Vous avez concaténer vos valeurs pour former un argument approprié pour GeomFromText:

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

L'opérateur de tuyau (||) est utilisé pour concaténer des chaînes. Mais une meilleure solution est d'utiliser la fonction Point directement:

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

Pour SQLite/Spatialite il est

UPDATE mytable SET location = GeomFromText('POINT('||latitude||" "||longitude||')'); 
Questions connexes