Php 选择仅包含一个不同列的重复行并将其分组

Php 选择仅包含一个不同列的重复行并将其分组,php,html,mysql,sql,Php,Html,Mysql,Sql,我试图使用此查询从这些表中选择重复但国家不同的行 SELECT a.FirstName, a.LastName, c.Country, SUM(b.Scores) AS Score FROM names a INNER JOIN countries c ON a.id = c.cid INNER JOIN scores b ON a.id = b.sid WHERE a.id = :id GROUP BY c.Country ORDER BY Sc

我试图使用此查询从这些表中选择
重复
但国家不同的

SELECT
    a.FirstName,
    a.LastName,
    c.Country,
    SUM(b.Scores) AS Score
FROM names a
INNER JOIN countries c
    ON a.id = c.cid
INNER JOIN scores b
    ON a.id = b.sid
WHERE a.id = :id
GROUP BY c.Country
ORDER BY Score ASC
静力学应该是

           names                           countries                       scores
[id  --  FirstName  -- LastName]    [id --  cid  --  Country]      [id   --  sid  --  Score]
[1   --   FName1    --  LName1 ]    [1  --   1   --  USA    ]      [1    --   1   --      5] 
[2   --   FName2    --  LName2 ]    [2  --   1   --  France ]      [2    --   1   --      6]
[3   --   FName3    --  LName3 ]    [3  --   1   --  Germany]      [3    --   2   --      7]
[4   --   FName4    --  LName4 ]    [4  --   2   --  Germany]      [4    --   2   --      8] 
                                    [5  --   2   --  Czech  ]      [5    --   2   --      2]
                                    [6  --   3   --  Germany]      [6    --   4   --     10]
                                    [7  --   4   --  France ]      [7    --   3   --     15]
我希望像下面的HTML结构一样获得这些数据

.Container div{
边框:1px纯蓝色;
利润率:10px;
}
.货柜组{
边框:1px纯红;
利润率:10px;
}

德国的
FName2
LName2
FName1
LName1
FName3
LName3
法国
FName4
LName4
FName1
LName1
捷克的
FName2
LName2
美国
FName1
LName1
通过“行”,我将您的问题解释为多个国家的名称。如果是:

{id[1] -> FName1 -> LName1}--{cid[1] -> USA, France, Germany}--{sid[1] -> 11}
{id[2] -> FName2 -> LName2}--{cid[2] -> Czech    ,   Germany}--{sid[2] -> 17}
{id[3] -> FName3 -> LName3}--{cid[3] ->        Germany      }--{sid[3] -> 10}
{id[4] -> FName4 -> LName4}--{cid[4] ->        France       }--{sid[4] -> 15}

此解决方案是否需要对PHP代码进行一些更改才能使用
foreach($countries作为$country)
?因为我只得到一个id为法语、德语的HTML
div
,如果我只是将
countries
定义为一个变量,那么我就不会得到任何值,除非存在重复。因此,我将
HAVING
更改为
>0
,并返回到上一个问题。
SELECT n.FirstName, n.LastName,
       GROUP_CONCAT(DISTINCT c.Country) as countries, SUM(s.Scores) AS Score
FROM names n INNER JOIN
     countries c
     ON n.id = c.cid INNER JOIN
     scores s
     ON n.id = s.sid
WHERE n.id = :id
GROUP BY n.id, n.FirstName, n.LastName
HAVING COUNT(DISTINCT c.country) > 1
ORDER BY Score ASC;