2015-04-30 122 views
-1

我是新来的PHP和MySQL,我试图建立一个表。不过,我有一个非常有趣的错误,我无法修复。PHP,虽然循环不显示结果

代码:

//Initializing mysql queries 
//-----------------------SELECTING GOALS------------ 
$sql= "SELECT * FROM goals"; 
$records = mysql_query($sql); 
//-----------------------SELECTING SERVICES--------- 
$sql2= "SELECT * FROM services"; 
$records2 = mysql_query($sql2); 

//----------------SELECTING THE JUNCTION---------- 
$sql3 = "SELECT services.sid AS sid, services.name, objectives.oid 
FROM services, objectives, servo 
WHERE servo.s_id = services.id AND servo.obj_id = objectives.id"; 
$records3 = mysql_query($sql3); 

$sql4 = "SELECT oid, gid, statement, GROUP_CONCAT(DISTINCT gid) AS GOID 
FROM goals, objectives, obgoals 
WHERE obgoals.go_id = goals.id AND obgoals.ob_id = objectives.id 
GROUP BY oid"; 
    $records4 = mysql_query($sql4); 

<?php 
while ($product = mysql_fetch_assoc($records2)) { 

    echo "<tr>"; 

    $sid = $product['sid']; 
    $service = $product['name']; 
    echo "<td><a href='objectives.php?sid=" . $sid . "&service=" . $service .      "'>" . $product['sid'] . "</a> </td>"; 

    echo "<td>".$product['name']."</td>"; 
    echo "<td>"; 


    while ($g4services = mysql_fetch_assoc($records)) { 
     echo $g4services['gid']; 
    } 
echo"</td>" ; 
} 

?> 

基本上,我的表具有30行和3列,最后一列是应该从数据库中打印出的值,这部分是由这一段代码完成

while ($g4services = mysql_fetch_assoc($records)) { 
      echo $g4services['gid']; 
     } 

但是,不是打印每行的结果,它只打印第一行的结果,基本上是第一个while循环运行并创建30行的表,但第二个while循环只打印第一个值只有行。基本上这是发生:

|SID|Name Of Service| Objectives| 
------------------------------- 
|S1| Service 1  | make the best cars| 
|s2| Service 2  |     | 
|s3| Service 3  |     | 
|s4| Service 5  |     | 
|s5| Service 5  |     | 
..... 
..... 
.... 
|s30| Service30  |     | 

由于某种原因,我的目标列没有填充while循环,它只适用于第一行。如果有人可以帮助我在while循环中打印每行的值,这将是巨大的帮助。我将不胜感激。谢谢。

+0

你怎么初始化'$ records'? –

+0

检查每个迭代的'$ records'。 –

+0

外循环的第一次迭代将读取第二个查询的所有行。剩下的迭代将不会在'$ records2'中留下任何东西。 – Barmar

回答

0

问题是,您在while循环的第一次迭代期间正在读取$records的所有结果。在未来的迭代中,没有更多行,因此内部while循环立即完成。

你可以阅读这些成果一旦进入循环外的变量,然后在循环过程表明变量:

$all_g4services = ''; 
while ($g4services = mysql_fetch_assoc($records)) { 
    $all_g4services .= $g4services['gid']; 
} 

while ($product = mysql_fetch_assoc($records2)) { 

    echo "<tr>"; 

    $sid = $product['sid']; 
    $service = $product['name']; 
    echo "<td><a href='objectives.php?sid=" . $sid . "&service=" . $service .      "'>" . $product['sid'] . "</a> </td>"; 

    echo "<td>".$product['name']."</td>"; 
    echo "<td>$all_g4services;</td>" ; 
} 
+0

非常感谢,这工作。所以我认为内循环会重新读取记录的结果,因为外循环再次调用它。 – cdcrazy2292

0

你的第二个while循环不是必需的。它正在为每一行运行。去掉它。然后,对于每一行,您必须找到匹配的条目并仅回显该条目。

echo $g4services['gid'] 

我不知道如何纠正它,因为我不知道两者之间的关系。