Как объединить две таблицы MySQL с помощью функции - PullRequest
1 голос
/ 25 июня 2010

Мне нужна помощь в соединении двух столов.У меня есть:

my_type_table, который имеет столбцы:

  • тип (VARCHAR)
  • широта (десятичная)
  • долгота (десятичное число)

... и neighborhood_shapes, в котором есть столбцы:

  • окрестности (VARCHAR)
  • окрестности_полигонов (геометрия)

У меня есть функция с именем 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

Моя проблема в том, что у меня много окрестностей.Я не хочу каждый раз вводить окрестности.Есть ли способ удалить "Ньюпорт"?По сути, я хочу, чтобы функция выполнялась в каждой точке и давала мне тип, широту, долготу и окрестность, в которой находится точка?

Я мог бы скопировать приведенный выше оператор выбора и объединить операторы выбора с помощью UNION ALLно это был бы кошмар, набравший название каждого района.Должен быть лучший способ.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 25 июня 2010

я, конечно, не проверял это ... но похоже, что его можно реструктурировать, как это:

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
1 голос
/ 25 июня 2010

Вы пробовали ...

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
0 голосов
/ 25 июня 2010
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...