2013-02-20 84 views
0

我似乎无法弄清楚为什么这个脚本是这样做的,所以我需要有更多经验/更好的眼睛的人告诉我问题是什么。我似乎无法在网上找到其他任何地方,但我可能会用我的搜索条件错误地表述。这组虽然/ foreach循环的作品就好了,除了它吐出来的是同一行四次: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表中的前两个条目是“鲍勃·罗斯,br”和“阿尔弗雷德·希区柯克,ah“,那么上面的代码会吐出这个:

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! 

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

+0

只是删除'的foreach($ srow为$ S小区)'循环 – 2013-02-20 20:07:42

回答

0

我认为这个问题从在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/>"; 
     } 
    //} 
+0

优秀。完美的作品。谢谢你们每个人。我从几年前编写的另一个页面中提取了这个代码,虽然它不那么复杂,但我认为这个foreach是有必要的。我显然需要更多地理解循环。 – weildish 2013-02-20 20:23:03

0

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

0

您可以直接查询您从数据库中需要什么,迭代的简单结果简化你的代码。

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

你可以用某种连接和组来实现你想要的。 Somewthing像:

$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"; 

可能工作

0
$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