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为法语、德语的HTMLdiv
,如果我只是将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;