2012-02-17 56 views
4

我有一個問題。我有以下表中的MySQL:在MySQL中由一對多組成

+---------+ +-----------+ +---------+ 
| USER | | USER_LANG | | LANG | 
| id_user | | id_user | | id_lang | 
| name | | id_lang | | name | 
|   | | years  | |   | 
+---------+ +-----------+ +---------+ 

,我有如下信息:

+--------------------------------+ 
| ID_USER | ID_LANG | YEARS | 
| 1 |  5  |  1 | 
| 1 |  6  |  2 | 
| 2 |  5  |  9 | 
| 2 |  6  |  3 | 
| 3 |  5  |  7 | 
+--------------------------------+ 

我需要實現的是組誰講一模一樣組的語言的所有用戶和總結這些年。例如,我需要得到的是:

+----------------------+ 
| LANGS | SUM_YEARS | 
| 5;6 |  15 | 
| 5 |  7  | 
+----------------------+ 

這是很奇怪,但我需要這個。我嘗試了GROUP_CONCAT,但沒有奏效。

希望他們能幫助我。

在此先感謝。

+0

這個問題類似:[檢索集團從多到多個表(HTTP://計算器。 com/questions/9165904/retrieve-group-from-many-to-many-tables/9166259#9166259) – 2012-02-17 15:15:23

回答

3

這是一個不尋常的要求,但它應該制定出一個子查詢裏面的GROUP_CONCAT()

/* Outer query groups the concatentated langs and sums years */ 
SELECT 
    LANGS, 
    SUM(YEARS) AS TOTAL_YEARS, 
    /* Edit: bonus list of users speaking the languages */ 
    GROUP_CONCAT(ID_USER) AS USER_GROUP 
FROM (
    /* Subquery gets group concat of languages & sum per user */ 
    SELECT 
    ID_USER, 
    GROUP_CONCAT(ID_LANG) AS LANGS, 
    SUM(YEARS) AS YEARS 
    FROM USER_LANG 
    GROUP BY ID_USER 
) USER_SUB 
GROUP BY LANGS 
+0

非常感謝...它的工作! – toledorobia 2012-02-17 15:37:54