【问题标题】:While/foreach Loops Returning Four of the Same RowWhile/foreach 循环返回同一行的四个
【发布时间】:2013-02-05 23:41:31
【问题描述】:

我似乎无法弄清楚为什么这个脚本会这样做,所以我需要有更多经验/更好的眼睛的人来告诉我问题是什么。我似乎无法在网上其他地方找到任何东西,但我的搜索字词可能是错误的。这组 While/Foreach 循环工作得很好,只是它会吐出同一行四次:

   $squery = "SELECT username, name FROM name_records";
   $sresult = mysql_query($squery);
   while($srow = mysql_fetch_array($sresult)) {
        foreach ($srow as $scell) {
        $username = $srow['username'];
             $name = $srow['name'];
             $queryi = "SELECT SUM(totalseconds) FROM gradpoint WHERE username = '$username'";
             $resulti = mysql_query($queryi) or die(mysql_error());
             while($rowi = mysql_fetch_array($resulti)){
                  $total = $rowi['SUM(totalseconds)'];
                  $minutes = $total / 60;
                  echo $name ." has worked for " .$minutes ." minutes today! Good jorb!<p/>";
             }
         }
 }

如果 name_records 表中的前两个条目是“Bob Ross, br01234”和“Alfred Hitchcock, ah43210”,那么上面的代码会输出:

 Bob Ross has worked for 342 minutes today! Good jorb!
 Bob Ross has worked for 342 minutes today! Good jorb!
 Bob Ross has worked for 342 minutes today! Good jorb!
 Bob Ross has worked for 342 minutes today! Good jorb!
 Alfred Hitchcock has worked for 187 minutes today! Good jorb!
 Alfred Hitchcock has worked for 187 minutes today! Good jorb!
 Alfred Hitchcock has worked for 187 minutes today! Good jorb!
 Alfred Hitchcock has worked for 187 minutes today! Good jorb!

为什么是四个?为什么?!我尝试了几种不同的方法来修复它(抱歉,我不记得我现在尝试了什么),但都无济于事。

【问题讨论】:

  • 删除foreach ($srow as $scell)循环

标签: php loops foreach while-loop repeat


【解决方案1】:

我认为问题来自 foreach:

    //foreach ($srow as $scell) {
    $username = $srow['username'];
         $name = $srow['name'];
         $queryi = "SELECT SUM(totalseconds) FROM gradpoint WHERE username = '$username'";
         $resulti = mysql_query($queryi) or die(mysql_error());
         while($rowi = mysql_fetch_array($resulti)){
              $total = $rowi['SUM(totalseconds)'];
              $minutes = $total / 60;
              echo $name ." has worked for " .$minutes ." minutes today! Good jorb!<p/>";
         }
     //}

【讨论】:

  • 优秀。完美运行。谢谢你们每一个人。我从几年前编写的另一个页面中提取了这段代码,该页面做了类似的事情,虽然不太复杂,所以我认为 foreach 出于某种原因是必要的。我显然需要进一步加深对循环的理解。
【解决方案2】:

问题在于您正在遍历列。删除 foreach 循环,你应该会很好。

【讨论】:

    【解决方案3】:

    您可以通过直接从数据库中查询您需要的内容并迭代简单的结果来简化您的代码。

    SELECT name, username, sum(gradpoint.totalseconds) as total FROM name_records, gradpoint where name_records = gradpoint.username group by gradpoint.username
    

    【讨论】:

      【解决方案4】:

      您可以通过某种加入和群组来实现您的愿望。 有点像:

         $squery = "SELECT nr.username, nr.name, SUM(g.totalseconds) as totsec FROM name_records nr, gradpoint g
      WHERE g.username=nr.username
      GROUP BY nr.username,nr.name";
      

      可能有用

      【讨论】:

        【解决方案5】:
        $query = "
        SELECT u.*, (SUM(g.totalseconds) / 60) as sum
        FROM name_records u
        JOIN gradpoint g
        ON  u.username = g.username
        GROUP BY u.username;
        ";
        $result = mysql_query($query);
        while($row = mysql_fetch_array($result)) {
            echo $row['name'] . " has worked for " . $row['sum'] . " minutes today! Good jorb!<br/>";
        }
        

        还包括除以 60。

        【讨论】:

          猜你喜欢
          • 2021-09-24
          • 2016-05-22
          • 2017-11-09
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 2017-04-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多