Php 列出按类别名称分组的记录
我遇到一些问题,试图从我的数据库中获取数据,并正确显示它。我有一个布局,其中有两个列表,我可以在每个列表中添加行。我可以在每个列表中添加多行 我想显示输出,所以首先显示第一个列表及其所有行,然后显示第二个列表及其行 目前的情况是这样的:Php 列出按类别名称分组的记录,php,mysql,join,pdo,Php,Mysql,Join,Pdo,我遇到一些问题,试图从我的数据库中获取数据,并正确显示它。我有一个布局,其中有两个列表,我可以在每个列表中添加行。我可以在每个列表中添加多行 我想显示输出,所以首先显示第一个列表及其所有行,然后显示第二个列表及其行 目前的情况是这样的: LIST #1 -- row inside list #1 -- -- row inside list #1 -- LIST #2 -- row inside list #2 -- LIST #1 -- row inside
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 --
目前,它显示如下:
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>";
}
我做错了什么?如果运行SQL查询,并且希望结果按特定顺序排列,则始终包含ORDERBY子句 在您的情况下,您似乎想要:
$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就是你所说的列表id
我应该注意,您的列表id在SELECT中出现了两次,因为它在两个表中。您可能应该明确列出两个表中所需的列,并避免冗余列。幸运的是,您使用的是PDO,它已经为您提供了此功能,可以完全按照您的要求进行操作—根据某个列对数据进行分组 ,基于选定的第一个字段。因此,您需要将列表id列为字段列表中的第一个字段,然后使用前面提到的fetchAll获取模式获取行:
foreach ($driving as $list_id => $list_data)
{
echo $list_data[0]['list_name']."<br />\n";
foreach ($list_data as $row)
{
echo "whatever";
}
}
现在您得到了一个整洁的嵌套数组,其中的行按列表id分组
要使其输出整洁,必须使用两个嵌套的foreach运算符
这将正确排序列表,但不会合并列表中的所有行。现在,它在列表中为每一行显示一个列表。我想合并每个列表中的列表行。您应该在应用程序级别进行合并。我不太确定您在“选择”窗口中两次看到列表id的位置?我只看到列表id和id@oliverbj . . . 这是在驱动列表出货,以及。这是相当甜蜜的!工作起来很有魅力。但是,只是一个关于双嵌套foreach语句的问题—这会如何影响性能?只是一个后续问题—如何在第一个foreach语句中使用表中的数据?例如,如何在第一个foreach语句中打印dl.list\u name值?是的,当然。始终至少有一行,因此您可以像$list\U data[0]['list\U name'一样安全地对其进行寻址