我使用mysql 5.7
我想将连接表的结果连接成单列。我使用包含在JSON_OBJECT
函数中的GROUP_CONCAT
函数。这是查询
SELECT r.id, r.name,
GROUP_CONCAT(
JSON_OBJECT(
'id', i.id, 'name', i.name, 'metrics', i.metrics, 'amount', ir.amount,
'cat_id', i.cat_id, 'cat_name', ic.name
)) AS ingredients
FROM recipes r, ingredient_recipe_meta ir, ingredients i, ingredient_category ic
WHERE r.id = ir.recipe_id
AND i.id = ir.ingredient_id
AND i.cat_id = ic.id
GROUP BY r.id
LIMIT 1
列ingredients
包含来自连接表的数据。数据检索正确,但问题是ingredients
列没有转换为正确的JSON。
正如你所看到的那样,最后有点“切”。
我也试过JSON_ARRAY
,但现在它没有转换为正确的数组。看起来,字符串太大而且不适合列。有办法解决这个问题吗?
更新
问题必须是尺寸不合适的尺寸。我试图从连接表中选择较少的列,并且它可以正常工作。也许有选择的方法可以将我的json列转换为'on fly'文本?我试图将列转换为文本,如
CAST(GROUP_CONCAT(... AS TEXT)
但它会出现语法错误
答案 0 :(得分:4)
问题是因为GROUP_CONCAT
函数的字符串长度有限,这是1024,感谢@Paul Spiegel在评论部分提到这一点。长度可以很容易地增加,这post清楚地解释了