[英]Select Duplicated Rows with only one different Column And Group it
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
I'm trying to use this query to select
rows with duplicated
but with different countries
So from these tables 我正在尝试使用此查询来select
duplicated
但具有不同countries
行,因此从这些表中进行选择
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]
The statics supposed to be 静力学应该是
{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}
I want to get these data like the following HTML structure 我想获取这些数据,例如以下HTML结构
.Container div { border: 1px solid blue; margin: 10px; } .Container div div { border: 1px solid red; margin: 10px; }
<div> <div id="Master German">German</div> <div id="German"> <div class="Container"> <div id='FName2 German'> <div>FName2</div> <div>LName2</div> </div> <div id='FName1 German'> <div>FName1</div> <div>LName1</div> </div> <div id='FName3 German'> <div>FName3</div> <div>LName3</div> </div> </div> </div> <div id="Master France">France</div> <div id="France"> <div class="Container"> <div id='FName4 France'> <div>FName4</div> <div>LName4</div> </div> <div id='FName1 France'> <div>FName1</div> <div>LName1</div> </div> </div> </div> <div id="Master Czech">Czech</div> <div id="Czech"> <div class="Container"> <div id='FName2 Czech'> <div>FName2</div> <div>LName2</div> </div> </div> </div> <div id="Master USA">USA</div> <div id="USA"> <div class="Container"> <div id='FName1 USA'> <div>FName1</div> <div>LName1</div> </div> </div> </div> </div>
What i'm tried to use on my query was the following PHP
code 我尝试在查询中使用的是以下PHP
代码
$pre = null;
echo "<div>";
$end = "";
while ($row = $stmt->fetch()) {
$FName = $row['FirstName'];
$LName = $row['LastName'];
$Country = $row['Country'];
if ($Country != $pre) {
echo $end;
echo "<div id='Master $Country'>$Country</div>";
echo "<div id='$Country'>";
}
$end = "</div>
</div>";
$pre = $Country;
echo "
<div id='$FName USA'>
<div>$FName</div>
<div>$LName</div>
</div>";
}
echo $end;
echo "</div>";
But doesn't work as intended at all and gives me a headache trying to fix it, But with no hope. 但是,它根本无法按预期工作,并且让我头疼的要修复它,但是没有希望。
Is there a better way to handle this? 有没有更好的方法来解决这个问题? from SQL side or PHP side or mixed if possible. 从SQL端或PHP端开始,或者尽可能混合使用。
By "rows", I interpret your question as names
with multiple counries. 通过“行”,我将您的问题解释为具有多个国家的names
。 If so: 如果是这样的话:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.