在MySQL查询中迭代JSON

6
我正在寻找类似于MySQL中JSON数组的forEach函数。在MySQL JSON数据类型中,我像这样管理ID:[1, 2, 3, 4, 5],并且我想对列表中的每个项目执行操作。一个天真的解决方案是使用WHILE循环和从0开始计数到VAR_MANAGER_ID为null结束的计数器。以下是WHILE循环内部的虚构示例:
SET VAR_PATH = CONCAT('$[', COUNTER, ']');
SET VAR_MANAGER_ID = JSON_PARSE(VAR_MANAGER_IDS, PATH);

# See if we've reached the end of the list
IF VAR_MANAGER_ID IS NULL
THEN 
    BREAK
END;
INSERT INTO LU_MANAGER (MANAGER_ID) VALUES (VAR_MANAGER_ID);

但一定有更好的方法!我该怎么做才能像这样:

FOREACH JSON_PARSE(VAR_MANAGER_IDS, '$[*]') AS VAR_MANAGER_ID
    INSERT INTO LU_MANAGER (MANAGER_ID) VALUES (VAR_MANAGER_ID);

1
您正在寻找一个名为common_schema :: foreach的功能,然而在MySQL 5.7中,common_schema似乎无法正常工作。 - wchiquito
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Max Heiber
1
[foreach :: 常量集合](https://common-schema.googlecode.com/svn/trunk/common_schema/doc/html/foreach.html)可能会很有用,比如:`{1、2、3、4、5}`。 - wchiquito
2
常用模式链接已损坏。 - juntapao
1个回答

13

我是一个完全的新手,但我找到了一种使用 REPEAT-UNTIL-END REPEAT 迭代 JSON 数组的方法。

   REPEAT
        SET txt = JSON_EXTRACT(myjson, CONCAT("$[", indx, "]"));
        # use txt
        SET indx = indx + 1;
        UNTIL indx = JSON_LENGTH(myjson)
   END REPEAT;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接