Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中对同一个mysql查询迭代两次_Php_Mysqli_Mariadb - Fatal编程技术网

在PHP中对同一个mysql查询迭代两次

在PHP中对同一个mysql查询迭代两次,php,mysqli,mariadb,Php,Mysqli,Mariadb,我有一个MySQL帖子表,如下所示: | id | post | parent | +----+--------------------------------------+--------+ | 1 | Hello world | 0 | | 2 | response to 1 | 1 | | 3 | r

我有一个MySQL帖子表,如下所示:

| id | post                                 | parent |
+----+--------------------------------------+--------+
|  1 |    Hello world                       |      0 |
|  2 |    response to 1                     |      1 |
|  3 |    response to 1                     |      1 |
|  4 |    new opening post                  |      0 |
如果帖子是期初帖子,则父级设置为0。如果是对开场白的回复,它的父项是一个ID值。我试图获取表,打印每个开场白,然后在它们下面缩进打印回复。这是我目前为止所做的,但它不起作用:

while ($row = mysqli_fetch_assoc($result)) {
        if ($row["parent"] == 0) {
        echo "" . $row["id"] . " | " . $row["post"] . "<br>"; }
                while ($row2 = mysqli_fetch_assoc($result)) {
                        if ($row["id"] == $row2["parent"]) {
                                echo ">" . $row2["id"] . " | " . $row2["post"] . "<br>"; }}}
while($row=mysqli\u fetch\u assoc($result)){
如果($row[“parent”]==0){
回显“.$row[“id”]。”|“.$row[“post”]。”
“;} while($row2=mysqli\u fetch\u assoc($result)){ 如果($row[“id”]==$row2[“父”]){ echo“>”$row2[“id”]。“|”。$row2[“post”]。“
”;}}
我在互联网上四处寻找解决方案已经有一段时间了,但没有结果;我曾尝试将mysql结果放入数组,但也没有成功。如果有人能给我指出正确的方向,我将不胜感激。提前谢谢


这不是重复的,因为我希望继续浏览表格,而不是在每次操作后重置。

使用一个语句为id、post和parent创建三个数组,然后将每一行数据添加到这些数组中,并使用to for循环创建显示结果,类似于此代码的事情可能会奏效

$id=array();
$post=array();
$parent=array();
while ($row = mysqli_fetch_assoc($result)) {
$id[]=$row["id"];
$post[]=$row["post"];
$parent[]=$row["parent"];
}
for($i=0;$i<count($id);$i++){
if($parent[$i]==0){
echo $parent[$i];
for($j=0;$j<count($parent);$j++){
if($parent[$j]==$id[$i]){
echo $post[$j];
}
}
}
$id=array();
$post=array();
$parent=array();
while($row=mysqli\u fetch\u assoc($result)){
$id[]=$row[“id”];
$post[]=$row[“post”];
$parent[]=$row[“parent”];
}

对于($i=0;$i)的可能重复项,您可以在表中再放几个数据点吗?我现在看到的两行没有太多意义。如果testmessage具有
id
=
2
,则有意义。但是对于
id
=
0
,我不确定您的数据结构是否正确。当您说“不工作”时,您能详细说明一下吗?这远不是一种简化邻接列表的方法。@bugsy是
$row['post']
未显示的问题之一?它正常工作了。没有想到为每个列创建单独的数组。谢谢!