2010-08-16 47 views
25

我有兩個表:DISH和DISH_HAS_DISHES。菜桌上有所有的菜餚,「Dish_has_dishes」桌子與「菜」桌子有一對多的關係。即一道菜可以有多個菜。例如MySQL:多行作爲逗號分隔單行

DISH

dish_id dish_name 
1   dish_1 
2   dish_2 
3   dish_3 
4   dish_4 

DISH_HAS_DISHES

meal_id dish_id 
1   2 
1   3 
1   4 

這裏meal_id和dish_id兩者都是從DISH表ID。現在我想要一個這樣的格式:

meal_id  dish_ids  dish_names 
1   2,3,4  dish_2, dish_3, dish_4 

這是用逗號分隔的每道菜的ID和名稱。怎麼做?

回答

60

使用GROUP_CONCAT功能

http://dev.mysql.com/tech-resources/articles/4.1/grab-bag.html

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 
+0

那真棒。比你快速回復Micheal。只需要問一個問題,我將「dish_ids」列作爲「BLOB」類型。休息是正確的。爲什麼? – Swar 2010-08-16 11:31:17

+0

@Swar,應該是varchar,dish_ids的長度是多少?另請參閱http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat。檢查參數group_concat_max_len的值,默認情況下,如果結果字符串將超過512個字符(默認值),它將作爲BLOB返回 – 2010-08-16 12:13:46

+0

它們只是長度爲11的整數。我僅用4個id - 6,7,8和9進行了測試。雖然blob類型,它的工作完美,但只是一個查詢。 – Swar 2010-08-16 12:17:22