[英]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.