【问题标题】:Sub Query Problems子查询问题
【发布时间】:2015-06-26 09:38:36
【问题描述】:

我无法理解如何编写以下代码。我有一张带有纬度/经度列表的表格,另一张带有纬度和经度的地名列表的表格。我需要做的是: 1)循环遍历表1中的每个项目,获取经纬度,对表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 循环执行此操作,但我认为这不是最好的方式,我无法让它工作

感谢您的任何帮助或建议!

【问题讨论】:

    标签: php mysql geo


    【解决方案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)
    

    【讨论】:

    • 完美,正是我需要的!
    • 对于偶然发现此答案的任何人,请注意,纬度/经度不是变量,但需要更改为表中的引用。 (table_2.lon 等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多