2014-11-21 61 views
0

我有以下查询二次表中选择多个记录:需要重写查询在

SELECT 
      p.id, 
      p.name, 
      tc.comment 
     FROM people AS p 
     LEFT JOIN comments AS tc ON (tc.pID = p.id) 
     WHERE p.projID = $project_id 
     GROUP BY p.id 

当它被写原来曾经有每人一个评论,但后来又改为允许多个来自同一个人的评论。但是,此查询仅挑选与特定人员匹配的第一条评论。我想知道是否有办法改写它,以便它能够选择与每个人相关的所有评论,还是需要将评论分离到它自己的查询中以在每个人的行内运行?这看起来效率很低。

+0

上面的查询将返回所有的意见。你没有'group by'子句。 – 2014-11-21 17:51:59

+0

对不起,我其实有一群人,我忘了在这里输入。我现在修好了。 – santa 2014-11-21 17:57:09

回答

1

您需要使用GROUP_CONCAT()聚合函数,将返回组合在单个列中的所有注释:

SELECT 
    p.id, 
    p.name, 
    GROUP_CONCAT(tc.comment) AS comments 
FROM 
    people AS p LEFT JOIN comments AS tc 
    ON tc.pID = p.id 
WHERE 
    p.projID = $project_id 
GROUP BY 
    p.id, 
    p.name 
0

删除GROUP BY,它将返回所有评论。

SELECT 
      p.id, 
      p.name, 
      tc.comment 
     FROM people AS p 
     LEFT JOIN comments AS tc ON (tc.pID = p.id) 
     WHERE p.projID = $project_id 
+0

是的,它确实会返回所有评论,但会为每个评论的相同参与者创建一个新行,而不是将所有评论都包含在单个参与者行中。 – santa 2014-11-21 18:37:14

+0

您究竟如何显示评论? – Tom 2014-11-24 20:20:52