while while循环内循环问题

时间:2011-02-01 21:21:49

标签: php sql-server while-loop

好的,所以我将作业的数据从SQL Server 2008通过php提取到html表。每项工作都可以/确实有多项任务。我正在使用1 while循环(在此之后知道'外部'while)和另一个while循环在前一个循环的一个单元格中显示任务(在此之后知道为'内部'同时)以显示每个作业我发现它退出'内部'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>";
                 }

2 个答案:

答案 0 :(得分:2)

我不相信你可以在PHP的sql server驱动程序的同一连接上有多个打开的结果集。

你有几个选择。

  1. 使用两个不同的数据库连接,一个用于外部查询,另一个用于内部查询。

  2. 只需执行一个查询,连接两个表并按Job_ID排序,然后在代码中使用逻辑来确定何时从一个Job_ID更改为另一个。

  3. 选项2可能会提供最佳性能,因为它可以避免进行多次查询。

答案 1 :(得分:0)

您可能希望查看在SQL Server 2005中启动的多个活动结果集(MARS)功能。您可以在此处找到信息:

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

我没有试过这个,但听起来它解决了你想要做的事情。

我不确定它是否适用于PHP,但值得尝试。