Конвертировать многоточечный в MySQL

Если многие точки хранятся в виде геометрии в поле как многоточечные, как выбрать (и преобразовать) все точки?

Но без процедуры while или loop, потому что они слишком медленные, и без преобразования строк.

Например: в таблице № 1

MULTIPOINT(48 16,49 16,50 16)

Я хочу добиться такого результата, как:

id |     point
1  |  POINT(48 16)
2  |  POINT(49 16)
3  |  POINT(50 16)

1 ответ

Единственный "трюк" здесь - это генерация последовательности натуральных чисел. Для этого - ваш лучший выбор будет создать numbers таблица, которая будет просто содержать числа от 1. Максимальное количество точек, которое вы считаете возможным для каждой MultiPoint:

CREATE TABLE `numbers` (
  id int,
  PRIMARY KEY (`id`)
);
INSERT INTO `numbers` VALUES (1),(2),(3),(4),(5); /* ... as many as needed */

Теперь, когда мы решили это, вы можете использовать следующий запрос, чтобы разбить MultiPoint на точки:

SELECT `numbers`.`id`, AsText(GeometryN(`geometryFieldName`, `numbers`.`id`))
FROM `geometryTableName`
INNER JOIN `numbers` ON
  (`numbers`.`id` <= NumGeometries(`geometryFieldName`))
Другие вопросы по тегам