【问题标题】:Updating a MySQL column using values from other columns from the same table使用同一表中其他列的值更新 MySQL 列
【发布时间】:2012-04-20 02:32:14
【问题描述】:

我刚刚创建了一个新的GEOMETRY 列p,需要根据列lat 和lng 中的现有值为p 填充表中所有现有行的值。

问题:使用下面的查询更新单个列效果很好,因为我手动输入了 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';

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    对于 SQLite / Spatialite 它是

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

    【讨论】:

      【解决方案2】:

      您必须连接您的值以形成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';
      

      【讨论】:

        【解决方案3】:

        然后呢(去掉 geomfromtext 函数)

        更新列表 SET p = 点(纬度,经度) WHERE listing_id = '585221';

        或者你可以这样去

        更新列表 SET p = GeomFromText(CONCAT('POINT(',lat,' ',lng,')'));

        【讨论】:

        • 如果我使用SET p = POINT(lat, lng) 有效,我是否应该将列类型从GEOMETRY 更改为POINT?
        猜你喜欢
        • 2016-10-14
        • 2011-07-16
        • 2015-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-14
        • 1970-01-01
        相关资源
        最近更新 更多