【问题标题】:How do I Join Two MySQL Tables Using a Function如何使用函数连接两个 MySQL 表
【发布时间】:2010-06-25 17:31:31
【问题描述】:

我需要一些帮助来加入两个表。我有:

my_type_table,其中有列:

  • 类型(VARCHAR)
  • 纬度(十进制)
  • 经度(十进制)

...和neighborhood_shapes,它有列:

  • 社区 (VARCHAR)
  • neighborhood_polygons(几何)

我有一个名为myWithin 的函数,它检查纬度和经度以查看它们是否在邻域多边形中。它以纬度和邻域形状作为参数。如果点不在多边形内,myWithin 函数返回 0,如果在多边形内,则返回 1。

我可以做如下选择语句:

SELECT type, latitude, longitude, 'Newport' AS neighborhood
  FROM my_type_table
WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', latitude, ' ', longitude, ')' ) ) , 
               (SELECT neighborhood_shapes.neighborhood_polygons
                  FROM neighborhood_shapes
                 WHERE neighborhood_shapes.neighborhoods = 'Newport')) = 1

本次选择的结果例如:

type  |  latitude | longitude | neighborhood
---------------------------------------------
small |  30.3030  | -70.7070  | Newport

我的问题是我有很多社区。我不想每次都输入邻域。有没有办法删除“新港”?基本上,我希望函数在每个点上运行,并给出类型、纬度、经度以及该点所在的邻域?

我可以复制上面的 select 并使用 UNION ALL 加入 select 语句,但输入每个社区的名称将是一场噩梦。一定有更好的方法。

有什么建议吗?

【问题讨论】:

    标签: mysql select join


    【解决方案1】:

    我当然没有测试这个......但它似乎可以像这样重组:

    SELECT t.type, t.latitude, t.longitude, s.neighborhood 
      FROM my_type_table t, neighborhood_shapes s
    WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', t.latitude, ' ', t.longitude, ')' ) ) ,               s.neighborhood_shapes.neighborhood_polygons ) = 1
    

    【讨论】:

    • 嗨兰迪,非常感谢您的帮助!男人也这么快!它工作得很好。 (Randy 没有这样测试它,对于那些需要复制它的人,这里需要一些非常小的更改):a)我必须将 s.neighborhood 更改为 s.neighborhoods b)将 s.neighborhood_shapes.neighborhood_polygons 更改为 s .neighborhood_polygons c) 在 s.neighborhood_polygons 之后添加另一个 ) 我已经解决这个问题几天了,你在 5 分钟内解决了它。再次感谢您!
    【解决方案2】:

    你试过了吗……

    SELECT DISTINCT type,
                    latitude,
                    longitude,
                    ns.neighborhoods AS neighborhood
        FROM my_type_table,
             neighborhood_shapes ns
        WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', latitude, ' ', longitude, ')' ) ) , 
                       (SELECT neighborhood_shapes.neighborhood_polygons
                            FROM  neighborhood_shapes
                            WHERE neighborhood_shapes.neighborhoods = ns.neighborhoods)) = 1
    

    【讨论】:

    • (我没有检查过这个,因为我没有类似你的功能可供我使用。)
    • 似乎是类似的回复 - 抱歉,在我发帖时您的回复不可见...
    • 嗨,布赖恩,感谢您的意见。感谢您的帮助。
    【解决方案3】:
    function getNeighborhood ($neighborhood) {
    
    
    $sql = "SELECT type, latitude, longitude, 'Newport' AS neighborhood
      FROM my_type_table
    WHERE myWithin(POINTFROMTEXT( CONCAT( 'POINT(', latitude, ' ', longitude, ')' ) ) , 
                   (SELECT neighborhood_shapes.neighborhood_polygons
                      FROM neighborhood_shapes
                     WHERE neighborhood_shapes.neighborhoods = $neighborhood)) = 1";
    
    $result = /**  Do Query Here**/
    
    return $result;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多