无法理解GROUP_CONCAT

时间:2013-09-19 09:18:20

标签: php mysql sql function

我似乎无法使GROUP_CONCAT查询生效。

我有这些表,我加入了:

  stud
id | stud_name  |         
-----------------
1  | Class1     | 
2  | Class2     | 

  note
id | stud_id    |   mat_id       |   Note      | 
------------------------------------------------
1  | 1          |      1         |  10         | 
2  | 1          |      2         |  9          | 
3  | 1          |      1         |  10         |

mat
id | mat_name | 
----------------
1  | Porc     | 
2  | Vaca     |

以下是我加入他们所做的事情。

 SELECT
             `stud`.`id`
            , `mat`.`mat_name`
            , `note`.`note`

    FROM
            `stud`
   LEFT JOIN 
            `note` 
    ON
             (`stud`.`id` = `note`.`id_stud`)
   LEFT JOIN 
            `mat` 
        ON 
             (`note`.`id_mate` = `mat`.`id`) 

这是我希望他们看的东西。

mat.id  | mat_name | Note      | 
-----------------------------
1       | Porc     | 10,10     | 
2       | Vaca     | 9         |

以下是他们的样子。

mat.id  | mat_name | Note      | 
-----------------------------
1       | Porc     | 10        | 
2       | Vaca     | 9         | 
1       | Port     | 10        |

我试过这样做。

 SELECT 
 `mat`.`mat_name`,
 GROUP_CONCAT(`note`.`note`) AS `note`.`note`,
FROM ( "Here is what I did to join them." )attr_groups
GROUP BY `mat`.`mat_name`;
ORDER BY `mat`.`mat_name`;

有什么想法吗?

编辑:如果我添加group by或ORDER by,则找不到任何结果。如果我不添加它们,则查询可以正常工作但不会连接它们。

3 个答案:

答案 0 :(得分:2)

SELECT mat.id,
       mat.mat_name,
       GROUP_CONCAT(note.note) as note
FROM mat
LEFT JOIN note ON mat.id = note.mat_id
LEFT JOIN stud ON note.stud_id = stud.id     
GROUP BY mat.id, mat.mat_name
ORDER BY mat.mat_name

SQLFiddle demo

答案 1 :(得分:0)

您在分组中有错误。

GROUP BY `mat`.`mat_name`;
------------------------^^^---

从查询中删除;

SELECT
     `stud`.`id`
    , `mat`.`mat_name`
    , GROUP_CONCAT(`note`.`note`) AS Note
FROM
    `stud`
LEFT JOIN 
    `note` 
ON
     (`stud`.`id` = `note`.`id_stud`)
LEFT JOIN 
    `mat` 
ON 
     (`note`.`id_mate` = `mat`.`id`) 
GROUP BY
    `stud`.mat_id
ORDER BY
    `mat`.`mat_name`

答案 2 :(得分:0)

试试这个:

SELECT
    m.id,
    m.mat_name,
    GROUP_CONCAT(n.Note) as grades
FROM
    mat m
LEFT JOIN note n
    ON n.mat_id = m.id
GROUP BY
    m.id