[英]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
我正在嘗試使用此查詢來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]
靜力學應該是
{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}
我想獲取這些數據,例如以下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>
我嘗試在查詢中使用的是以下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>";
但是,它根本無法按預期工作,並且讓我頭疼的要修復它,但是沒有希望。
有沒有更好的方法來解決這個問題? 從SQL端或PHP端開始,或者盡可能混合使用。
通過“行”,我將您的問題解釋為具有多個國家的names
。 如果是這樣的話:
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.