【问题标题】:While loop within while loop problemswhile循环内的while循环问题
【发布时间】:2011-06-19 13:53:15
【问题描述】:

好的,所以我正在通过 php 从 SQL Server 2008 将作业数据提取到 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>";
                 }

【问题讨论】:

标签: php sql-server while-loop


【解决方案1】:

您可能想了解从 SQL Server 2005 开始的多活动结果集 (MARS) 功能。您可以在此处找到相关信息:

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

我还没有尝试过,但听起来它解决了您正在尝试做的事情。

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

【讨论】:

    【解决方案2】:

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

    这里有几个选项。

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

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

    选项 2 可能会提供最佳性能,因为它避免了执行多个查询的需要。

    【讨论】:

    • 我想我明白你在说什么,但据我所知,如果我有 2 个工作,每个工作有 2 个任务,这将使我有 4 行而不是 2 行,其中一个单元格有 2价值观。但也许我只是忽略了一些非常基本的东西。
    • @Rob - 你是对的,它会给你 4 行。不过,您只会为遇到的每个新 Job_ID 显示“标题”行。
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多