列出按类别名称分组的记录

  时间:2022-05-11 09:18:13  阅读量:16  评论数:0  作者:oliverbj

我有一些问题,试图从我的数据库中获取数据,并正确地显示它。我有一个布局,在那里我有两个“列表”,在那里我可以向每个列表添加行。我可以向每个列表添加多行。

我想显示输出,因此首先显示第一个列表及其所有行,然后显示第二个列表及其行。

当前显示如下:

    LIST #1
 -- row inside list #1 -- 
 -- row inside list #1 --

    LIST #2
 -- row inside list #2 --

当前显示如下:

    LIST #1
 -- row inside list #1 -- 
    LIST #2
 -- row inside list #2 --
    LIST #1
 -- row inside list #1 --

下面是一个可视化:

这是我在PHP中的选择:

    $driving=$dbh->prepare("SELECT 
    driving_lists.id,
    driving_lists.list_id,
    driving_lists.date,
    driving_lists.list_name,
    driving_list_shipments.*
FROM
    driving_lists
        LEFT JOIN driving_list_shipments ON driving_lists.list_id = driving_list_shipments.list_id

    ");
    $driving->execute();

和输出脚本:

foreach( $driving as $row){
                echo "
";
                echo $row["list_name"];
                echo "<br />";
                echo $row["reference"];
                echo "
"; }
<p>What am I doing wrong?</p>

网友解决方案:

幸运的是,您正在使用PDO,它已经为您提供了这种功能,它可以做您想做的事情--根据某个列对数据进行分组。

PDO可以根据选择的第一个字段将结果分组到嵌套数组中。因此,您需要将列表id作为字段列表中的第一个字段列出,然后使用fetchAll()和前面提到的fetch模式获取行:

$sql = "SELECT dl.list_id, dl.id, dl.date, dl.list_name, dls.*
  FROM driving_lists dl LEFT JOIN
     driving_list_shipments dls
 ON dl.list_id = dls.list_id
 ORDER BY dl.list_id";

$driving = $dbh->query($sql)->fetchAll(PDO::FETCH_GROUP);

现在您得到了一个整洁的嵌套数组,其中行按列表ID分组!

要使其输出整齐,必须使用两个嵌套的foreach运算符

foreach ($driving as $list_id => $list_data)
{
     echo $list_data[0]['list_name']."<br />\n"; 
     foreach ($list_data as $row)
     {
         echo "whatever";
     }
}

原文地址(source):原文链接