我有一个我保留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`
但是现在找不到用我选择的结果更新其中一列的解决方案。
答案 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
。
希望这会对你有所帮助。