mysql - 展平表以准备 Json

标签 mysql sql json

也许是我累了,但我却忽略了这一点。

假设我想展平这张 table :

a_id   a_val  b_id   b_val  c_id   c_val  d_id   d_val
1      a      10     b      100    c      1000   f   
1      a      20     d      200    g      null   null 
2      e      30     h      300    i      null   null   
2      j      40     k      null   null   null   null 
3      l      null   null   null   null   null   null

进入此查询结果:

id mystring 
1, (1:a,10:b,100:c,1000:f),(1:a,20:d,200:g) 
2, (2:e,30:h,300:i),(2:j,40:k) 
3, (3:l) 

该表仅呈现四个深度级别(a、b、c、d),因此不存在动态 SQL 问题。

现在我通常只使用 GROUP_CONCAT(CONCAT(...)) 但这不适用于存在空值。也许使用合并可以解决这个问题,但是......我现在感觉很愚蠢......而且我无法弄清楚。

不幸的是,我无法在此安装上使用 mysql json 服务,因此我需要构建数据。谢谢。

最佳答案

这里的解决方案可能只是巧妙的串联和 IFNULL 调用的组合。我在黑暗中拍摄的:

SELECT a_id, GROUP_CONCAT(CONCAT('(',
    a_id, ':', a_value, ',', 
    IFNULL(b_id, ''), IF(b_id IS NOT NULL, ':', ''), IFNULL(b_val, ''),
    ...repeat for c and d
   ')'
) SEPARATOR ',')
FROM table
GROUP BY a_id;

关于mysql - 展平表以准备 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38511571/

相关文章:

MySQL 查询优化快把我逼疯了!几乎一样,但又截然不同

php - 如何使用 PHP 和 AJAX 创建 igoogle 布局(拖放和存储)?

Mysql:如何在插入时将正值转换为负值

sql - 如果您的事实有维度的多个实例怎么办?

c# - .NET core 3 : Order of serialization for JsonPropertyName (System. 文本.Json.序列化)

MySQL - 更好的语法来比较 where 子句中的多个变量

php - 优化包含许多查询的 PHP 页面

sql - IF EXISTS 不工作

java - 在运行时将属于 JSON 对象一部分的 JSON 字符串转换为 JSON 对象

json - 如何使用 Powershell 访问 Restful 网络服务?