【发布时间】:2011-01-09 08:26:13
【问题描述】:
嘿,DBA 和总体上很聪明的家伙。我有一个问题要问你。
我们使用 MySQL VIEW 将我们的数据在返回时格式化为 JSON(作为 BLOB),这很方便(虽然在性能上不是特别好,但我们已经知道这一点)。
但是,我现在似乎无法让特定的查询正常工作(每行包含 NULL,而它应该包含一个创建的 JSON 对象,该对象具有多个 JOIN 的值)。
大致思路如下:
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 时它可以工作,但现在有多个 JOIN / GROUP_CONCAT 就搞砸了。
当我从“cool_json”字段中移动 GROUP_CONCAT 时,它们会按预期工作,但我希望我的数据格式为 JSON,以便我可以一步在服务器端或客户端对其进行解码。
【问题讨论】:
-
您是否尝试过将此查询直接运行到数据库中。您在输出中是否收到有关 group_concat 的任何警告? group_concat 可以轻松达到 1024 个字符的自然限制。 (可以增加)
-
我已经
set global group_concat_max_len = 8192;(这已经足够了),但即使发生这种情况,它也只是切断了文本(我只收到NULL)。不错的猜测,不过,这是之前的问题(弄乱了我的 JSON)