MySQL:多行作为逗号分隔的单行
我有两张桌子:碟子和碟子。碟子桌上有所有的菜,“碟子桌上有碟子”桌与“碟子桌”有一对多的关系。也就是说,一道菜可以有多道菜。比如说 盘子:MySQL:多行作为逗号分隔的单行,mysql,database,Mysql,Database,我有两张桌子:碟子和碟子。碟子桌上有所有的菜,“碟子桌上有碟子”桌与“碟子桌”有一对多的关系。也就是说,一道菜可以有多道菜。比如说 盘子: dish_id dish_name 1 dish_1 2 dish_2 3 dish_3 4 dish_4 菜式\u有\u菜式: meal_id dish_id 1 2 1 3 1 4 这里的餐号和菜号都是来自菜表的id。现在我想要这样
dish_id dish_name
1 dish_1
2 dish_2
3 dish_3
4 dish_4
菜式\u有\u菜式:
meal_id dish_id
1 2
1 3
1 4
这里的餐号和菜号都是来自菜表的id。现在我想要这样的格式:
meal_id dish_ids dish_names
1 2,3,4 dish_2, dish_3, dish_4
这是以逗号分隔的菜肴id和每顿饭的名称。如何做到这一点?使用GROUP\u CONCAT函数
太棒了。谢谢你的快速回复。只需要问一件事,我得到的“dish_id”列是“BLOB”类型。休息是适当的。为什么?@Swar,应该是varchar,盘子的长度是多少?也看看这个。检查参数组_concat_max_len的值,默认情况下,如果结果字符串将超过512个字符(默认值),则将返回为blob,它们只是长度为11的整数。我只测试了4个ID-6、7、8和9。虽然是blob类型,但它工作得很好,只是一个查询。@Swar,非常奇怪。在文档中:返回值是非二进制或二进制字符串,这取决于参数是非二进制还是二进制字符串。结果类型为TEXT或BLOB,除非group_concat_max_len小于或等于512,在这种情况下,结果类型为VARCHAR或VARBINARY。(在MySQL 5.0.19之前,GROUP_CONCAT()返回文本或BLOB GROUP_CONCAT_max_len大于512,前提是查询包含ORDER BY子句。)谢谢@MichaelPakhantsov,您为我节省了很多时间,非常感谢。
SELEct m.meal_Id,
GROUP_CONCAT(dish_id) dish_ids,
GROUP_CONCAT(dish_name) dish_names
FROM DISH_HAS_DISHES m JOIN DISH d ON (m.dish_id = d.dish_id)
GROUP BY meal_Id