2010-09-08 4 views
33

Ho due tabelle, parole chiave e dati.Come raggruppare le righe mysql con lo stesso valore di colonna in una riga?

Le parole chiave della tabella hanno 2 colonne (id, parola chiave), i dati della tabella hanno 3 colonne (id [chiave esterna di keywords.id], nome, valore).

Sto usando questa query:

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

che restituisce qualcosa come:

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

Ogni id può avere valori da 0 a 3 (forse più in futuro).

Come posso recuperare tutte le righe con lo stesso id nella stessa riga?

Come

1 123 456 
2 943 
3 542 532 682 

che voglio fare questo perché voglio essere in grado di ordinare i valori.

+2

Questo è il tipo di trasformazione che sarebbe davvero meglio fare lato applicazione, piuttosto che chiedere a MySQL di farlo. – Amber

+0

Sono d'accordo con Amber, anche se si vuole ancora fare solo con SQL, hmm .. vorrei definire google per le funzioni "concat" e "group by" di sql. –

+0

Voglio farlo perché voglio essere in grado di ordinare i valori, quindi sarebbe bello se potessi ottenerlo ordinato direttamente da mysql. Sai come ho potuto ordinare facilmente ogni colonna memorizzandola in un array php? – jarkam

risposta

59

Usa GROUP_CONCAT() come questo:

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 

Inoltre, potrebbe essere necessario fare per ottenere ORDER BY d.name esatto ordine di valori come si desidera. In questo modo:

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

Sì. Ho dimenticato GROUP BY ... – jarkam

+0

Hai dimenticato il' GROUP BY k.id'? – Amber

+0

@Jarkam, perché non hai usato 'GROUP BY k.id' in questa query. – shamittomar