php - 循环从按关系排序和摸索的整个表中选择一个不同的行

标签 php mysql sql group-by

在我的查询中

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/

相关文章:

php - 在 Coldfusion 中加密,然后在 PHP 中解密

php - 如何确定 html 标记是否拆分为多行

php - Laravel 5.8 无法连接到非本地数据库

javascript - 如何在选择标签上打开新选项卡

mysql:如果表B中不存在,则从表A中选择所有项目

mysql - 如何将另一个表中的一组值存储在 MySQL 的字段中

mysql - 从内部查询连接

SQL Server 的 SQL 语句,从包含 2 次方值和的列中选择条目

mysql - 改进 MySQL 查询以获取记录

php - 在选择查询中从两个不同的表中减去两个不同的列总和