当前位置: 首页 > 面试题库 >

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

牛智志
2023-03-14
问题内容

来自我的另一个问题,在该问题中,我学会了不要在循环内使用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循环。

也许只是我头疼…


问题答案:

查询应如下所示:

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都包含两个表中的字段…如果这是一个问题,那么您需要在上面的循环中更改分配以仅拉出您想要的字段。



 类似资料:
  • 问题内容: 我正在尝试从数据JSON获取值。我已经成功遍历了JSON数据,几乎满足了我的需求! 在Python中运行以下命令: 给我这个: 我只想获得价值。这是关键。 如何进一步执行命令以仅返回值? 问题答案: 这是完整的输出吗?这本字典包含带有嵌套字典的列表,因此您应该这样处理。假设它被称为: 您的第一个地址是对象,然后是字典中的键,列表中的索引以及该字典的键: 输出: 编辑:根据您所得到的然后

  • 问题内容: MYSQL返回一个数组,如下所示。我正在使用列:“ id_parent”自引用表以创建层次结构。因此,“ id”为2的条目可以是“ id_parent”为2的任何条目的父级,依此类推。 如何将子级嵌套在其父级数组中的数组中 问题答案: 引用具有顺序无关紧要的优点(子节点可以位于其父节点之前):

  • 这里我有两个文档,我需要查询以获得和我只想获得符合以上条件的注释。并非所有评论。 ' { “_id”: ObjectId(“53b7f2383ed7755c2400002e”), “title”: “Post One”, “author”: “bob”, “posted”: ISODate(“2014-07-05T12:40:24.0Z”), “pageViews”: NumberInt(5),

  • 问题内容: 我有一个来自csv的数组,其结构与此类似: 我想将其插入到mysql表中,其中第一个数组的项(名称,年龄,性别)是列标题,而每个后续数组是表中的一行。 有人能建议我做这件事的最好方法,因为我撞墙了,这使我头疼! 问题答案: 以下代码将起作用,但是假定所有嵌套数组的长度都相同,换句话说,每个嵌套数组都包含第一个嵌套数组中定义的所有属性的值。 只要所有其他嵌套数组的长度相同,该解决方案就可

  • 例如,我有一个这样的数组 但输出只有11、12、13、14、15。我想打印所有的值。有人能帮我修改一下吗?提前谢谢

  • 我试图弄清楚嵌套for循环是如何与JavaScipt中的多维数组一起工作的,但有一点让我有些困惑。以股票为例 这就是我所期望的结果123456。但是,如果我将数字添加到外部数组的末尾: 我仍然得到同样的输出1 2 3 4 5 6?我不明白为什么 输出是一个bcdyz,这是我所期望的。为什么字符串的行为会有所不同?