【问题标题】:php: Too many outputs with nested while loopsphp:嵌套while循环的输出过多
【发布时间】:2014-09-07 19:18:46
【问题描述】:

我有一张表up_vadba,其中有一些需要打印的记录。我创建了三个嵌套的 while 循环(见下文),它们返回主类别、子类别和子类别结果。

一切都很好,除了如果上一个子类别结果比上一个子类别结果更多,最后一个子类别结果可能会输出太多结果 - 我希望你明白我在解释什么? 对于第一个主要类别,我有两个子类别,每个子类别中有两个或更多子类别结果。此代码输出与先前子类别中一样多的子类别结果,而不是正确数量的结果。

我现在正在用头撞墙几天来解决这个问题,似乎我无法弄清楚。我还使用了mysqli_fetch_array 函数,使用了计数器,但没有任何帮助。

你们中的任何人都可以看看代码有什么问题吗?谢谢大家,会为我节省一堵墙:D

$sql="SELECT * FROM up_vadba WHERE upid='$usid' GROUP BY vadba"; //it gets main category
$vadbe=mysqli_query($cxn,$sql) or die ("Nisem uspel izvesti poizvedbe vadb");
while($vadba=mysqli_fetch_assoc($vadbe)) //as long as there is main category
{
  echo "Vadba ".$vadba['vadba']."<br>";
  $sqlvaje="SELECT * FROM up_vadba WHERE upid='$usid' GROUP BY imeVaje"; //it gets subcategory
  $vaje=mysqli_query($cxn,$sqlvaje) or die ("Nisem uspel izvesti poizvedb vaj");
  while($vaja=mysqli_fetch_assoc($vaje)) //as long as there is subcategory
  {
    echo $vaja['imeVaje']."<br>";
    $sqlserije="SELECT * FROM up_vadba WHERE upid='$usid' GROUP BY serija"; //it gets subcategory results 
    $serije=mysqli_query($cxn,$sqlserije) or die ("Nisem uspel izvesti poizvedb serij");
    while($serija=mysqli_fetch_assoc($serije)) //as long as there are subcategory results
        {
        echo "serija".$serija['serija']." ".$serija['ponovitve']." ponovitev<br>";
    }
  }
}

我得到了这个输出:

Vadba 1
- počep
    serija 1
    serija 2
    serija 3
- izpadni korak
    serija 1
    serija 2
    serija 3

代替:

Vadba 1
- počep
    serija 1
    serija 2
    serija 3
- izpadni korak
    serija 1
    serija 2

【问题讨论】:

  • 你能包含输出吗?
  • 当然,我得到:Vadba 1 - počep serija 1 serija 2 serija 3 - izpadni korak serija 1 serija 2 serija 3 而不是:Vadba 1 - počep serija 1 serija 2 serija 3 - izpadni korak serija 1 serija 2
  • echo "serija".$serija['serija']." ".$serija['ponovitve']." ponovitev&lt;br&gt;"; 这与您提供的输出不兼容! ponovitev 输出中的单词在哪里?
  • "serija".$serija['serija']." 之后回显的内容并不重要,所以我只是指出了问题。你说得对,每一行都有“serija N”之后的“N ponovitve”。

标签: php loops while-loop nested


【解决方案1】:

查看您的最后一个查询:

$sqlserije="SELECT * FROM up_vadba WHERE upid='$usid' GROUP BY serija";

您不会更改$usid,因此您每次都会获得完全相同的子类别列表!如果您将 sql 数据库中的数据编辑为序列号以外的其他内容,则更容易发现。我相信您需要确保 $usid 与当前的 $vaja['id'] 兼容(假设是您的子类别)。

current是指第二个while循环中的对象。

【讨论】:

    【解决方案2】:

    是的,是的,它起作用了,它起作用了……我只需要在我的最后一个语句中添加另一个条件。当我得到 15 个代表点时,我会投票。非常感谢。我怎么不记得这样做??? 这是我添加的内容:

    ...echo $vaja['imeVaje']."<br>";
    $subvaja=$vaja['imeVaje'];
    $sqlserije="SELECT * FROM up_vadba WHERE upid='$usid' AND imeVaje='$subvaja' GROUP BY serija"; //as long as there are subcategory results...
    

    再次感谢各位。你从脑震荡中拯救了我的墙和我的头:D

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2014-11-11
      • 2012-01-02
      • 1970-01-01
      • 2013-05-11
      相关资源
      最近更新 更多