我遇到了一些问题,试图从数据库中获取数据并正确显示它.我有一个布局,其中有两个“列表”,可以在其中向每个列表添加行.我可以在每个列表中添加多行.
我想显示输出,因此首先显示第一个列表及其所有行,然后显示第二个列表及其行.
当前,显示如下:
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 can group results into the nested arrays,基于所选的第一个字段.因此,您需要将列表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";
}
}