gpt4 book ai didi

mysql - 我们如何将带有last_insert_id的数组插入到表中?

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

我在 mysql 中有一个存储过程,语法如下:

    insert into tbl1 (p1, p2) values (p2, p3);
set inserted_id = last_insert_id();
insert into tbl2 (id, image) values (inserted_id, 'list_of_image');

现在我不知道如何为这个插入分离这个图像列表(没有固定的计数)。有什么想法吗?

最佳答案

假设 'list_of_image' 是一个包含逗号分隔值的字符串,您可以使用纯 SQL 执行以下操作

DELIMITER $$
CREATE PROCEDURE sp_insert_images(IN p3 VARCHAR(64), IN p4 VARCHAR(64), IN images VARCHAR(512))
BEGIN
INSERT INTO Table1 (p1, p2)
VALUES (p3, p4);

INSERT INTO Table2 (id, image)
SELECT LAST_INSERT_ID(), SUBSTRING_INDEX(SUBSTRING_INDEX(i.images, ',', n.n), ',', -1) image
FROM
(
SELECT images images
) i CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(i.images) - LENGTH(REPLACE(i.images, ',', '')));
END$$
DELIMITER ;

调用您的 SP

CALL sp_insert_images('Some value1', 'Some value2', 'image1, image2, image3');

这里是SQLFiddle 演示。

注意:

  1. 示例查询将拆分最多 100 个逗号分隔值。如果您需要更多或更少,您可以通过编辑内部子查询来调整限制。
  2. 您可以考虑创建一个永久计数(数字)表,并使用它来代替动态生成数字序列的内部选择(使用别名 n)。

关于mysql - 我们如何将带有last_insert_id的数组插入到表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17627874/

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