mysql,更新lat在半径范围内的表,lng来自select

时间:2017-06-16 08:43:37

标签: mysql sql

我有一个我保留lat,lng的数据库,所以找到使用此代码选择半径路径的解决方案

SELECT `id`, (3959 * acos( cos( radians(46.352165) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(6.096681) ) + sin( radians(46.352165) ) * sin(radians(lat)) ) )
AS distance FROM`routes` HAVING distance < 1`

但是现在找不到用我选择的结果更新其中一列的解决方案。

2 个答案:

答案 0 :(得分:0)

如果您想更新路线:

UPDATE routes  JOIN
  (
    SELECT `id`, (3959 * acos( cos( radians(46.352165) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(6.096681) ) + sin( radians(46.352165) ) * sin(radians(lat)) ) ) as distance from routes having distance <1
) as t2
ON (routes.id = t2.id)
SET varYouWantToSet=distance;

你的问题让我有些困惑,如果我没有正确回答,请原谅我^^&#39;

答案 1 :(得分:0)

UPDATE routes  
INNER JOIN
  (
    SELECT `id`, (3959 * acos( cos( radians(46.352165) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(6.096681) ) + sin( radians(46.352165) ) * sin(radians(lat)) ) ) AS YOURUPDATEDVAL from routes having distance <1
) Z
ON (routes.id = Z.id)
SET routes.YOURUPDATECOLUMN=Z.YOURUPDATEDVAL;

正如上面的查询中所提到的,您可以尝试 inner join ,这将在一些示例表中显示 Z 。 现在,您可以使用内部表或查询返回的值来更新列值。 在这里我提到使用SET routes.YOURUPDATECOLUMN=Z.YOURUPDATEDVAL

希望这会对你有所帮助。