Php 从数据库获取嵌套关联数组

Php 从数据库获取嵌套关联数组,php,multidimensional-array,mysqli,Php,Multidimensional Array,Mysqli,我想做下面的事情,但还没有找到方法 或者我不确定是否有更好的方法/实践,如果你能告诉我,我将不胜感激 我的数据库上有两张表 表1:类别 表2:子类别 表2通过主键与表1关联 因此,对于表1中的一行,我可以在表2中有多个关联行 我在我的表1上查询并获取数据,如下所示: $result = $mysqli->query("SELECT * FROM table1"); $post = array(); while ($row = $result->fetch_object(

我想做下面的事情,但还没有找到方法

或者我不确定是否有更好的方法/实践,如果你能告诉我,我将不胜感激

我的数据库上有两张表

  • 表1:类别
  • 表2:子类别
表2通过主键与表1关联

因此,对于表1中的一行,我可以在表2中有多个关联行

我在我的表1上查询并获取数据,如下所示:

$result = $mysqli->query("SELECT * FROM table1");

$post = array();
    while ($row = $result->fetch_object()){
        $row->sub = get_subcategories($row['id']); /* this value is added to the array since i want to store in here the associated arrays from the table2 */
        $post[] = $row;
    }
return $post;
然后,我还基于table1中的每个id对table2数据的另一个函数执行以下查询

function get_subcategories($id){
   $result = $mysqli->query("SELECT * FROM table2 where categories_id = '$id'");

   $post = array();
    while ($row = $result->fetch_object()){
        $post[] = $row;
    }
return $post;
}
但是我在使用var_dump时得到的结果似乎不正确

我能做吗?或者我做错了什么


提前感谢

使用单个连接查询:

$result = $mysqli->query("SELECT * FROM table1 t1 JOIN table2 t2 ON t2.categories_id = t1.id ORDER BY t1.id"); 
$posts = array();
while ($row = $result->fetch_object) {
    if (!isset($posts[$row->categories_id])) {
        $posts[$row->categories_id] = $row;
        $posts[$row->categories_id]->sub = array();
    }
    $posts[$row->categories_id]->sub[] = $row;
}

这将创建嵌套数组。第一级是关联数组,其关键帧是类别ID,值是对象。对象将具有一个
子属性,该属性是所有子类别的数组。类别和子类别都是由
fetch\u object
返回的对象,因此会有重复。但是您可以只参考特定级别的适当对象属性。

var_转储的结果是什么?为什么不使用一个使用JOIN的查询。您将数组分配给
$post
,但返回
$posts
(带有额外的
s
)。
$row['sub']
当你使用
fetch_object
时不起作用,它应该是
$row->sub
@barmar没有注意到,只是修复了它,在粘贴它时混合了一个代码。感谢它并使用
var_dump()
查看。好吧,我试过了,它似乎在工作,或者至少它在表2上带来了正确的行数,但我得到的每个项目的结果都是相同的,例如Electronica Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares Celulares可能我在循环中做了一些错误除了特定于子类别的属性外,特定
数组的所有元素都将相同。