MySQL 分组并合并 JSON 值

标签 mysql json

我正在使用一些 native JSON 字段来存储有关 MySQL 5.7.10 数据库中某些应用程序实体的信息。每个“实体”可以有“N”行,并且需要将 JSON 对象汇总并合并在一起,任何冲突的键都应该替换而不是合并。我可以通过代码来做到这一点,但如果我能在 MySQL 中以原生方式高效地做到这一点,那就更好了。

我曾尝试结合使用 GROUP_CONCAT 和 JSON_MERGE,但我遇到了两个问题:

  1. JSON_MERGE 不会将 GROUP_CONCAT 的结果作为有效参数
  2. JSON_MERGE 合并冲突的键而不是替换它们。我真正需要的是更多的 JSON_SET,但带有“N”个 JSON 文档,而不是“键、值”符号。

对于当前的 MySQL JSON 实现,这可能吗?

最佳答案

您可以执行以下操作:

SELECT
    CAST(CONCAT(
        '[',
        GROUP_CONCAT(
            DISTINCT JSON_OBJECT(
                'foo', mytable.foo,
                'bar', mytable.bar
            )
        ),
        ']'
    ) AS JSON) AS myJsonArr
FROM mytable
GROUP BY mytable.someGroup;

关于MySQL 分组并合并 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018710/

相关文章:

c# - 当值可以是对象或空数组时反序列化 JSON

mysql - 如何插入同时删除与插入值不匹配的行

mysql - 如何使用这种协同过滤形式实现相关文章算法

mysql - 在 mySQL/phpmyadmin 中创建新列时出现问题

mysql - 从另一个表mysql镜像一行

json - 通过宏定义时,无法正确推断出特性实现

ios - Swift 中的 Firebase 嵌套查询无法正常工作

mysql - CakePHP 3 - 有条件地保存关联表中的数据

iphone - 使用 JSON 问题在 UITableView 中导航缓慢

java - 从 JSONObject 提取值并将其复制到 HashMap