2013-05-11 167 views
1

我有以下查询:MySQL的 - GROUP BY GROUP_CONCAT

SELECT 
    issue.`sequence` AS issue_sequence, 
    issue.`description` AS issue_description, 
    GROUP_CONCAT(DISTINCT(issue_category.`name`) SEPARATOR ', ') AS issue_category_name, 
    GROUP_CONCAT(DISTINCT(approach.`name`) SEPARATOR ', ') AS approach_name, 
    issue_approach.`issue_id` AS issue_approach_issue_id, 
    issue_approach.`approach_id` AS issue_approach_approach_id 
FROM 
    `approach` approach 
    INNER JOIN `issue_approach` issue_approach ON approach.`id` = issue_approach.`approach_id` 
    INNER JOIN `issue` issue ON issue_approach.`issue_id` = issue.`id` 
    INNER JOIN `project` project ON issue.`project` = project.`id` 
    INNER JOIN `tenant` tenant ON project.`tenant_id` = tenant.`id` 
    INNER JOIN `issue_category` issue_category ON project.`id` = issue_category.`project` 
    INNER JOIN `user` user ON tenant.`id` = user.`tenant_id` 
WHERE user.id = 1 AND project.id = 1 
GROUP BY issue_category_name 
ORDER BY issue_category.`name`, issue.`sequence` 

我有这行的一个问题:

GROUP BY issue_category_name 

显然,MySQL的似乎无法对集团由别名通过GROUP_CONCAT结果。 我不是一个真正的SQL专家,但有没有一种方法可以使用GROUP_CONCAT的结果进行分组?

样本数据;

类别:网络,服务器 问题Id:1 描述:一些描述 方法:一些解决问题的方法。

基本上,一个问题可以属于一个或多个类别。我将每个问题的类别连接起来。我想要做的是按类别连接的结果对结果进行分组。因此,例如,类别为“网络”,“服务器”的组问题。

谢谢。

+0

错误信息是什么意思? – 2013-05-11 13:28:08

+0

查询应该做什么?你能用文字描述还是提供样本数据和想要的输出? – 2013-05-11 13:45:41

+0

这没有任何意义。你的目标是什么? – 2013-05-11 14:10:07

回答

3

我不是MySQL用户,而是通过改变你的小组

Group By GROUP_CONCAT(DISTINCT(issue_category.`name`) SEPARATOR ', ') 
2

参考SQL EXECUTION ORDER,为什么这是行不通的原因是因为在SELECT语句以便SQL要执行的最后一条语句引擎不会知道您的列别名,而将组合记录作为GROUP BY发生在SELECT之前。因此,正如Charles Bretana的答案所暗示的那样,在你的group by子句中,输入

Group By GROUP_CONCAT(DISTINCT(issue_category.`name`) SEPARATOR ', ') 

。它会正常工作。

希望这可以帮助你。