簡體   English   中英

如何使用函數聯接兩個MySQL表

[英]How do I Join Two MySQL Tables Using a Function

我需要一些幫助加入兩個表。 我有:

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

我的問題是我有很多社區。 我不想每次都輸入鄰居。 有沒有辦法刪除“ Newport”? 基本上,我希望函數在每個點上運行,並提供類型,緯度,經度以及該點位於哪個鄰域中?

我可以復制上面的select並將select語句與UNION ALL聯接在一起,但是輸入每個鄰域的名稱將是一場噩夢。 必須有一個更好的方法。

有什么建議么?

我當然沒有測試過……但是似乎可以像這樣重組:

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

你有沒有嘗試過...

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
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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM