小编典典

PHP / mySQL-如何将嵌套的行提取到多维数组

mysql

来自我的另一个问题,该问题中,我学会了不要在循环内使用db查询,因此,在循环遍历之前,我必须学习如何以方便的方式获取所有数据。

假设我有两个表“ scales”和“
items”。项中的每个项都属于一个尺度,并与一个外键(scaleID)链接。我想在一个查询中将所有这些数据提取到一个数组结构中,以便第一个维度是所有列的所有比例尺并嵌套在其中,一个项目的所有项目都按比例缩放所有列。

结果将是这样的:

scale 1, scaleParam1, scaleParam2, ...
....item1, itemParam1, itemParam2, ...
....item2, itemParam1, itemParam2, ...
scale 2, scaleParam2, scaleParam2, ...
....item1, itemParam1, itemParam2, ...
....item2, itemParam1, itemParam2, ...

到目前为止,我主要完成了一对一关系的左联接。这是一对多的,我只是无法解决。

它是正确的联接吗,也可以通过子查询来完成,如何也将完整的外部行放入其中…

稍后,我想遍历嵌套的foreach循环。

也许只是我头疼…


阅读 694

收藏
2020-05-17

共1个答案

小编典典

查询应如下所示:

SELECT * FROM scales
INNER JOIN items ON scales.id = items.scale_id

如果要使用嵌套循环进行遍历,则需要将该数据拉入数组-希望您不会拉回太多以至于会占用过多内存。

$scales = array();

while ($row = mysql_fetch_assoc($data))
{
    if (!isset($scales[$row['scale_id']]))
    {
        $row['items'] = array();
        $scales[$row['scale_id']] = $row;
    }

    $scales[$row['scale_id']]['items'][] = $row;
}

然后,您可以遍历:

foreach ($scales as $scale)
{
    foreach ($scale['items'] as $item)
        ; //... do stuff
}

注意:这有点天真,因为$ scale和$ item都包含两个表中的字段…如果这是一个问题,那么您需要在上面的循环中更改分配以仅拉出您想要的字段。

2020-05-17