2011-02-01 175 views
0

好吧,所以我從SQL Server 2008通過PHP拉到一個作業的數據到一個HTML表格。每個工作都可以有多個任務。我使用1 while循環(以後稱爲'outer'while)以及另一個while循環在前一個循環的其中一個單元中顯示任務(在此處稱爲'inner'),以顯示每個作業我發現它退出'內部'while循環,但不會觸發'outer'while循環的下一輪。如果我註釋掉它的一切內容。儘管while循環內循環問題

$sql = "SELECT * FROM [euroJobSrv].[dbo].[Job],[euroJobSrv].[dbo].[Site]"; 
$result = dbQuery($sql); 
while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){ 
    $sql1 = "SELECT Task_Type FROM [euroJobSrv].[dbo].[JobTask] WHERE Task_Job_ID='".$row['Job_ID']."'"; 
    $result1 = dbQuery($sql1); 
    $Site_Address = str_replace(',', ', <br>', $row['Site_Address']); 
    $days = $row['Job_Finish_Date'] - $row['Job_Start_Date'] + '1'; 
    echo " <tr> 
       <th width=50> Job ID: </th> 
       <th width=50> Site Address:</th> 
       <th width=50> Start Date: </th> 
       <th width=50> Finish Date: </th> 
       <th width=50> Days: </th> 
       <th width=50> Overnight: </th> 
       <th width=50> Tasks: </th> 
      </tr>"; 
    echo " <tr> 
       <td width=50>".$row['Job_ID']."</td> 
       <td width=50>".$Site_Address."</td> 
       <td width=50>".$row['Job_Start_Date']."</td> 
       <td width=50>".$row['Job_Finish_Date']."</td> 
       <td width=50>".$days."</td> 
       <td width=50>".$row['Job_Overnight']."</td> 
       <td width=50><ul>"; 
            while ($row1 = sqlsrv_fetch_array($result1, SQLSRV_FETCH_ASSOC)){ 
              echo "<li>".$row1['Task_Type']."</li>";} 
    echo"  <ul></td> 
       <td><a href='include/job/modify.php?j=".$row['Job_ID']."'>modify</a></td> 
       </tr>"; 
       } 
+0

可能的重複[PHP的問題嵌套mysql_fetch_array()讓我瘋狂](http://stackoverflow.com/questions/2277855/php-problem-with-nested-mysql-fetch-array-driving-me-瘋狂) – marcog 2011-02-01 21:30:34

+0

sqlsrv驅動程序沒有相當於data_seek函數,這似乎是他的大部分類似示例的答案 – Rob 2011-02-01 21:34:59

回答

2

我不相信你可以在PHP的sql server驅動程序的同一連接上有多個打開的結果集。

這裏有幾個選項。

  1. 使用兩個不同的數據庫連接,一個用於外部查詢,一個用於內部查詢。

  2. 只需執行一個查詢,加入兩個表並按Job_ID排序,然後在代碼中使用邏輯來確定何時從一個Job_ID更改爲另一個。

選項2可能會提供最佳性能,因爲它避免了多次查詢的需要。

0

你可能要考慮多個活動結果集(MARS)功能,在SQL Server 2005開始,您可以找到的信息在這裏就可以了:

http://msdn.microsoft.com/en-us/library/h32h3abf(v=VS.90).aspx

我還沒有試過,但它聽起來像它解決你想要做的事情。

我不確定它是否能從PHP工作,但它值得嘗試。