Конвертировать многоточечный в 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`))