2011-02-01 170 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工作,但它值得尝试。