子查询问题

时间:2015-04-19 19:24:19

标签: php mysql geo

我有问题让我了解如何编写以下代码。我有一张表有纬度/经度列表,另一张表有纬度和经度的地名列表。我需要做的是: 1)循环遍历表1中的每个项目,抓住lat和long,在表2上进行半径搜索并获取地名,用新地名更新表1。这段代码为我提供了我需要的地名:

$sql="SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(lon) - radians('".$lng."')) + sin(radians('".$lat."')) * 
sin(radians(lat)))) 
AS distance 
FROM cats HAVING distance < 5 ORDER BY distance LIMIT 1";

我需要帮助弄清楚我如何将2个查询加在一起,或者是我从表1中循环lat / longs的最佳方式。我尝试用php循环这样做但我不认为这是最好的方式而且我无法让它工作

感谢您提供任何帮助或建议!

1 个答案:

答案 0 :(得分:1)

根据您的描述,我认为您需要这样的东西:

UPDATE table1 SET place_name = (SELECT place_name FROM 
table2
WHERE (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(lon) - radians('".$lng."')) + sin(radians('".$lat."')) * 
sin(radians(lat)))) < 5
ORDER BY (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(lon) - radians('".$lng."')) + sin(radians('".$lat."')) * 
sin(radians(lat)))) DESC
LIMIT 1)