Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:多行作为逗号分隔的单行_Mysql_Database - Fatal编程技术网

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