繁体   English   中英

使用GROUP_CONCAT问题的JSON VIEW

[英]JSON VIEW using GROUP_CONCAT question

嗨,DBA和整体聪明的家伙。 我有一个问题问你。

当数据返回时,我们使用MySQL VIEWs将数据格式化为JSON(作为BLOB),这很方便(尽管在性能上不是特别好,但是我们已经知道这一点)。

但是,我现在似乎无法使特定的查询正常工作(当每行应包含具有多个JOIN值的已创建JSON对象时,每一行都将包含NULL)。

这是一般的想法:

SELECT CONCAT(
  "{",
     "\"some_list\":[", GROUP_CONCAT( DISTINCT t1.id ), "],",
     "\"other_list\":[", GROUP_CONCAT( DISTINCT t2.id ), "],",
  "}"
) cool_json

FROM table_name tn

INNER JOIN ( some_table st ) ON st.some_id = tn.id

LEFT JOIN ( another_table at, another_one ao, used_multiple_times t1  )
 ON st.id = at.some_id AND
    at.different_id = ao.different_id AND
    ao.different_id = t1.id

LEFT JOIN ( another_table2 at2, another_one2 ao2, used_multiple_times t2  )
 ON st.id = at2.some_id AND
    at2.different_id = ao2.different_id AND
    ao2.different_id = t2.id

GROUP BY tn.id ORDER BY tn.name

有人知道这里的问题吗? 我是否缺少应分组的内容? 当我只做1个LEFT JOIN和GROUP_CONCAT时,它就工作了,但是现在有多个JOINs / GROUP_CONCATs,这很混乱。

当我从“ cool_json”字段中移动GROUP_CONCAT时,它们可以按预期工作,但是我希望将数据格式化为JSON,以便可以一步一步地将其解码为服务器端或客户端。

我已经测试了其中一些,找不到任何故障。

尝试创建一个像

CREATE VIEW tn_view AS
SELECT  tn.id, tn.name, t1.id, t2.id

FROM table_name tn

INNER JOIN ( some_table st ) ON st.some_id = tn.id

LEFT JOIN ( another_table at, another_one ao, used_multiple_times t1  )
 ON st.id = at.some_id AND
    at.different_id = ao.different_id AND
    ao.different_id = t1.id

LEFT JOIN ( another_table2 at2, another_one2 ao2, used_multiple_times t2  )
 ON st.id = at2.some_id AND
    at2.different_id = ao2.different_id AND
    ao2.different_id = t2.id

然后

SELECT CONCAT(
  "{",
     "\"some_list\":[", GROUP_CONCAT( DISTINCT t1.id ), "],",
     "\"other_list\":[", GROUP_CONCAT( DISTINCT t2.id ), "],",
  "}"
) cool_json
FROM tn_view
GROUP BY id ORDER BY name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM