2011-11-24 56 views
1

我被这个困住了,我想在使用GROUP_CONCAT时选择3个表中的所有字段。我做的是这个,但它什么都没有返回。使用组Concat

SELECT 
    personnel.Task_id AS personnel_Task_id, 
    personnel.Top_id AS personnel_Top_id, 
    GROUP_CONCAT(personnel.Personnel) AS Personnel, 
    project.P_id AS project_P_id, 
    project.P_name, project.P_manager, project.POC, 
    project.TSD, 
    project.TED, 
    project.ASD AS project_ASD, 
    project.AED AS project_AED, 
    project.DT AS project_DT, 
    project.DA AS project_DA, 
    project.DV AS project_DV, 
    task.Task_id AS task_Task_id, 
    task.Top_id AS task_Top_id, 
    task.Task_name, 
    task.Frm, 
    task.todate, 
    task.ASD AS task_ASD, 
    task.AED AS task_AED, 
    task.P_id AS task_P_id, 
    task.DT AS task_DT, 
    task.DA AS task_DA, 
    task.DV AS task_DV, 
    task.Completion 
FROM project_management.task, 
    project_management.project, 
    project_management.personnel 
WHERE personnel.Task_id = task.Task_id 
    AND project.P_id = task.P_id 
    AND task.Top_id = '$oldID'; 
+0

你没有得到任何结果可言,或不正确的结果?如果没有行,你可能会搞砸你的WHERE条件,或者没有任何top_id等于传递$ oldID的任务。 – socha23

+0

我正在使用无限子类的递归函数只是集成了这个SQL代码,我得到了错误的结果 – PiDO

+0

我可以发布整个代码,如果需要的话。顺便谢谢你的时间 – PiDO

回答

1

您需要使用GROUP BY对组CONCAT让我给一个解释

当您使用GROUP BY,您需要兼容

所有选择列就意味着你不能选择非分组列。

您需要在非分组的列

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

在这个示例表,我们不能选择ID直接

我们可以选择MAX(ID)MIN(ID),AVG使用组聚合函数(ID)...

示例表

|-id -|- Name -|- Department -| 
|- 1 -|- Name 1 -|-  1  -| 
|- 2 -|- Name 2 -|-  1  -| 
|- 3 -|- Name 3 -|-  1  -| 
|- 4 -|- Name 4 -|-  2  -| 

查询

SELECT GROUP_CONCAT(Name,DESC SEPARATOR ', ') As Names,Department 
FROM person 
GROUP BY Department 

结果

|-id -|-   Names   -|- Department -| 
|- 1 -|- Name 1, Name 2, Name 3 -|-  1  -| 
|- 2 -|-   Name 4   -|-  1  -| 
+0

你不知道。根据MySQL手册,“如果在不包含GROUP BY子句的语句中使用组函数,则相当于在所有行上进行分组。” – socha23

+0

它仍然没有返回.. – PiDO

+0

我想要发生的是输出所有的字段,同时在人事表上使用组concat .. – PiDO