2015-04-30 168 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'] 

我不知道如何糾正它,因爲我不知道兩者之間的關係。