我想做以下但未找到如何。
或者我不确定是否有更好的方法/练习,如果你能指出我的方式我将会欣赏它。
我的数据库上有2个表
表2 与主键的 table1 相关联。
因此,对于 table1 中的1行,我可以在 table2 上有多个关联的行。
我查询并获取 Table1 上的数据,如下所示:
$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时得到的结果似乎不正确。
我能做到吗?或者我做错了什么?
提前致谢
答案 0 :(得分:1)
使用单个JOIN查询:
$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,值是对象。对象将具有sub
属性,该属性是所有子类别的数组。类别和子类别都是fetch_object
返回的对象,因此会有重复。但是,您可以引用特定级别的相应对象属性。