2010-08-16 10 views
25

Ich habe zwei Tabellen: DISH und DISH_HAS_DISHES. Dish Tisch hat alle Gerichte und "Dish_has_dishes" Tisch hat eine Eins-zu-viele Beziehung mit "Dish" Tisch. I.e. Ein Gericht kann mehrere Gerichte haben. Zum BeispielMySQL: Mehrere Zeile als Komma getrennt Zeile

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 

Hier meal_id und beide gericht_id sind IDs von DISH-Tabelle. Jetzt möchte ich ein Format wie folgt aus:

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

Das Komma für jede Mahlzeit Gericht ID und Namen getrennt ist. Wie geht das?

Antwort

60

Verwenden GROUP_CONCAT FUNCTION

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

Das ist genial. Als du Micheal für deine schnelle Antwort. Nur eine Sache zu fragen, ich bekomme "Dish_ids" -Spalte als "BLOB" -Typ. Ruhe ist richtig. Warum? – Swar

+0

@Swar, Sollte Varchar sein, was ist die Länge von Dish_ids? Siehe auch http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat. Überprüfen Sie den Wert des Parameters group_concat_max_len, standardmäßig, wenn die resultierende Zeichenfolge mehr als 512 Zeichen (Standardwert) ist, wird es als BLOB –

+0

zurückgegeben. Sie sind nur ganze Zahlen mit der Länge 11. Ich testete mit nur 4 IDs - 6,7,8 & 9 Obwohl mit Blob-Typ funktioniert es perfekt, aber nur eine Abfrage. – Swar