gpt4 book ai didi

mysql - 在MySQL中获取多点空间数据

转载 作者:行者123 更新时间:2023-11-29 15:35:44 24 4
gpt4 key购买 nike

我没有找到任何答案如何在MySQL中选择多点数据类型中的每个点。我有包含许多点的多点,我想通过查询选择每个点,但我无法弄清楚。有任何想法吗?

表结构:Image

示例数据:Image

在 MySQL 文档中我只找到了这个,但没有帮助:https://dev.mysql.com/doc/refman/8.0/en/fetching-spatial-data.html

最佳答案

如果您使用 MySQL >= 8.0.2,则选项可能是:

DELIMITER //

CREATE PROCEDURE `sp_test`(`p_id` BIGINT UNSIGNED)
BEGIN
SET @`sql` := CONCAT('
WITH RECURSIVE `sequence` AS (
SELECT 1 `seq`
UNION ALL
SELECT `seq` + 1 `seq`
FROM `sequence`
WHERE `sequence`.`seq` < ?
)
SELECT
`sequence`.`seq` `id`,
ST_AsText(ST_GeometryN(`points`, `sequence`.`seq`)) `point`
FROM `sequence`
INNER JOIN `tb_test` ON
`tb_test`.`id` = ', `p_id`);

SET @`limit` := (
SELECT
ST_NumGeometries(`points`)
FROM
`tb_test`
WHERE
`id` = `p_id`
);

PREPARE `stmt` FROM @`sql`;
EXECUTE `stmt` USING @`limit`;
DEALLOCATE PREPARE `stmt`;
END//

DELIMITER ;

参见db-fiddle .

更新

DELIMITER //

CREATE PROCEDURE `sp_test`(`p_id` BIGINT UNSIGNED)
BEGIN
SET @`sql` := CONCAT('
WITH RECURSIVE `sequence` AS (
SELECT 1 `seq`
UNION ALL
SELECT `seq` + 1 `seq`
FROM `sequence`
WHERE `sequence`.`seq` < ?
)
SELECT
`sequence`.`seq` `id`,
ST_AsText(ST_GeometryN(`points`, `sequence`.`seq`)) `point`,
ST_X(ST_GeometryN(`points`, `sequence`.`seq`)) `X`,
ST_Y(ST_GeometryN(`points`, `sequence`.`seq`)) `Y`
FROM `sequence`
INNER JOIN `tb_test` ON
`tb_test`.`id` = ', `p_id`);

SET @`limit` := (
SELECT
ST_NumGeometries(`points`)
FROM
`tb_test`
WHERE
`id` = `p_id`
);

PREPARE `stmt` FROM @`sql`;
EXECUTE `stmt` USING @`limit`;
DEALLOCATE PREPARE `stmt`;
END//

DELIMITER ;

参见db-fiddle .

关于mysql - 在MySQL中获取多点空间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58256967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com