繁体   English   中英

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

[英]List records grouped by category name

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

我想显示输出,所以第一个列表,以及它的所有行首先显示,然后是第二个列表,以及它的行。

目前,它显示如下:

    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 "<pre>";
                echo $row["list_name"];
                echo "<br />";
                echo $row["reference"];
                echo "</pre>";
        }

我究竟做错了什么?

幸运的是,您正在使用已经具有此功能的PDO,它可以完全按照您的需要进行操作 - 根据某些列对数据进行分组。

PDO可以根据所选的第一个字段将结果分组到嵌套数组中 因此,您需要将列表ID列为字段列表中的第一个字段,然后使用带有上述获取模式的fetchAll()获取行:

$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";
     }
}

如果您运行SQL查询并希望按特定顺序执行结果,则始终包含order by子句。

在你的情况下,你似乎想要:

SELECT dl.id, dl.list_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;

我假设list_idlist_id意思。

我应该注意到你在SELECT出现了两次list_id ,因为它在两个表中。 您可能应该从两个表中明确列出所需的列,并避免使用冗余列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM