在我的查询中
SELECT a.FirstName, a.LastName, a.Country, SUM(b.Scores) AS Score FROM names a LEFT JOIN scores b ON a.id = b.id WERE id = :id GROUP BY a.FirstName ORDER BY Score ASC
现在我想做的是获得一个Distinct
国家/地区div,包含按Score
排序的所有First/LastNames
就像下面这样
[id -- FirstName -- LastName -- Country]
[1 -- FName1 -- LName1 -- CO1 ]
[2 -- FName2 -- LName2 -- CO1 ]
[3 -- FName3 -- LName3 -- CO2 ]
[4 -- FName4 -- LName4 -- CO3 ]
像这样得到它
CO1: (FName1-LName1,FName2-LName2)
CO2: (FName3-LName3)
CO3: (FName4-LName4)
所以我使用这个循环来让它工作。
$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='$Country'>$Country:";
echo "<div class='objects'>";
}
$end = "</div></div>";
$pre = $Country;
echo "<div>($FName - $LName)</div>";
}
echo $end;
它对我来说没问题,但是当我刷新时,我会再次重复 CO1
,如果再次引用,它就会消失,并且一次又一次,如果我删除了 Scores
部分,它工作得很好,但随着它它不断重复。
最佳答案
如果首先在数组中创建分组结构,则可以使事情变得更容易,如下所示:
while ($row = $stmt->fetch()) {
$countries[$row['Country']][] = $row;
}
现在 $countries
每个国家/地区将有一个条目,而该条目又将包含相关行的数组。然后您可以按如下方式生成 HTML:
foreach ($countries as $country => $rows) {
echo "<div id='$country'>$country\n";
echo " <div class='objects'>\n";
foreach ($rows as $row) {
echo " <div>({$row['FirstName']} - {$row['LastName']})</div>\n";
}
echo " </div>\n</div>\n";
}
查看它在 eval.in 上运行.
关于php - 循环从按关系排序和摸索的整个表中选择一个不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651296/