我使用mysql 5.7
我想将联接表的结果串联到单列中。我使用JSON_OBJECT包裹在GROUP_CONCAT函数中的函数。这是查询
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。 如您所见,最后有点“切”。
ingredients
我也尝试过JSON_ARRAY,但是现在它不能转换为正确的数组。它看起来像字符串太大,不适合列。有办法解决吗?
JSON_ARRAY
更新
问题必须出在不适合列的st大小中。我尝试从联接表中选择较少的列,并且它可以正常工作。也许有一种方法可以在选择时将我的json列“即时”转换为文本?我试图将列转换为文本
CAST(GROUP_CONCAT(... AS TEXT)
但是它给出了语法错误
问题是由于GROUP_CONCAT函数的字符串长度有限,即1024,这要归功于@Paul Spiegel在评论部分中提到了这一点。