2010-08-16 31 views
25

Tôi có hai bảng: DISH và DISH_HAS_DISHES. Bàn ăn có tất cả các món ăn và "Dish_has_dishes" bảng có một mối quan hệ một-nhiều với "Dish" bảng. I E. một món ăn có thể có nhiều món ăn. Ví dụMySQL: Nhiều hàng dưới dạng hàng đơn lẻ được phân tách bằng dấu phẩy

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 

Đây meal_id và dish_id cả hai đều ID từ bảng DISH. Bây giờ, tôi muốn có một định dạng như sau:

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

Đó là id và tên món ăn được phân cách bằng dấu phẩy cho mỗi bữa ăn. Làm thế nào để làm điều đó?

Trả lời

60

Sử dụng GROUP_CONCAT CHỨC NĂNG

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

Thats tuyệt vời. Hơn bạn Micheal cho trả lời nhanh chóng của bạn. Chỉ cần một điều để hỏi, tôi nhận được "dish_ids" cột là "BLOB" loại. Phần còn lại là thích hợp. Tại sao? – Swar

+0

@Swar, nên là varchar, chiều dài của dish_ids là bao nhiêu? Ngoài ra, hãy xem http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat này. Kiểm tra giá trị của tham số group_concat_max_len, theo mặc định nếu chuỗi kết quả sẽ lớn hơn 512 ký tự (giá trị mặc định), nó sẽ được trả về là BLOB –

+0

Chúng chỉ là số nguyên với chiều dài 11. Tôi đã thử nghiệm chỉ với 4 id - 6,7,8 & 9 Mặc dù với kiểu blob, nó hoạt động hoàn hảo nhưng chỉ là một truy vấn. – Swar

Các vấn đề liên quan