2010-09-08 9 views
33

Mam dwie tabele, słowa kluczowe i dane.Jak grupować wiersze mysql z tą samą wartością kolumny w jednym wierszu?

Słowa kluczowe w tabeli mają 2 kolumny (identyfikator, słowo kluczowe), dane tabeli mają 3 kolumny (id [klucz obcy słów kluczowych.id], nazwa, wartość).

Używam tej kwerendy:

SELECT k.id, d.value, d.name 
FROM keywords AS k 
INNER JOIN data as d ON k.id = d.id 

zwraca coś takiego:

1 123 name1 
1 456 name2 
2 943 name1 
3 542 name1 
3 532 name2 
3 682 name3 

Każdy identyfikator może przyjmować wartości od 0 do 3 (być może więcej w przyszłości).

Jak mogę pobrać wszystkie wiersze o tym samym identyfikatorze w tym samym wierszu?

Jak

1 123 456 
2 943 
3 542 532 682 

Chcę to zrobić, ponieważ chcę móc sortować wartości.

+2

To rodzaj transformacji, że to naprawdę lepiej byłoby zrobić po stronie aplikacji, zamiast pytać MySQL zrobić. – Amber

+0

Zgadzam się z Amber, ale jeśli nadal chcesz zrobić tylko z SQL, hmm .. Byłbym google detail dla funkcji "concat" i "group by" sql. –

+0

Chcę to zrobić, ponieważ chcę móc sortować wartości, więc byłoby świetnie, gdybym mógł je posortować bezpośrednio z mysql. Czy wiesz, jak mogę łatwo posortować każdą kolumnę przechowującą ją w tablicy php? – jarkam

Odpowiedz

59

Zastosowanie GROUP_CONCAT() tak:

SELECT k.id, GROUP_CONCAT(d.value) 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 

Ponadto, może trzeba zrobić ORDER BY d.name dostać dokładną kolejność wartości, jak chcesz. Tak:

SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ') 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 
+0

Tak, zapomniałem GROUP BY ... – jarkam

+0

Czy zapomniałeś' GROUP BY k.id'? – Amber

+0

@Jarkam, ponieważ w tym zapytaniu nie używałeś 'GROUP BY k.id'. – shamittomar