2010-08-16 21 views
25

Tengo dos tablas: DISH y DISH_HAS_DISHES. La mesa del plato tiene todos los platos y la mesa "Dish_has_dishes" tiene una relación uno a muchos con la mesa "Dish". Es decir. un plato puede tener múltiples platos. Por ejemploMySQL: Fila múltiple como fila separada por comas

PLATO:

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 

Aquí meal_id y dish_id ambos son identificadores de la tabla plato. Ahora quiero un formato como este:

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

que está separado por comas Identificación del plato y los nombres de cada comida. ¿Como hacer eso?

Respuesta

60

Uso GROUP_CONCAT FUNCIÓN

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

Eso es impresionante. Que tú, Micheal, por tu respuesta rápida. Solo una cosa para preguntar, estoy obteniendo la columna "dish_ids" como tipo "BLOB". El descanso es apropiado. ¿Por qué? – Swar

+0

@Swar, debe ser varchar, ¿cuál es la longitud de dish_ids? Consulte también este http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat. Verifique el valor del parámetro group_concat_max_len, de forma predeterminada si la cadena resultante tendrá más de 512 caracteres (valor predeterminado), se devolverá como BLOB –

+0

. Solo son enteros con longitud 11. Probé con solo 4 ids: 6,7,8 y 9 . Aunque con tipo de blob, funciona perfectamente pero solo es una consulta. – Swar

Cuestiones relacionadas