Хотя цикл внутри, в то время как проблемы цикла - PullRequest
0 голосов
/ 02 февраля 2011

ОК, так что я извлекаю данные для работы из SQL Server 2008 через php в таблицу html.каждая работа может иметь несколько задач.я использую 1 цикл while (известен здесь после как «external» while) и другой цикл while внутри одной из ячеек предыдущего цикла, чтобы отобразить задачи (знаю здесь after как «inner» 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 ]

2 голосов
/ 02 февраля 2011

Я не думаю, что вы можете иметь несколько открытых наборов результатов в одном соединении с драйвером сервера sql в PHP.

У вас есть несколько вариантов здесь.

  1. Используйте два разных соединения с базой данных, одно для внешнего запроса и одно для внутреннего запроса.

  2. Просто выполните один запрос, соединив две таблицы и упорядочив по Job_ID, затем используйтелогика в вашем коде, чтобы определить, когда вы переходите от одного Job_ID к другому.

Вариант 2, вероятно, обеспечит наилучшую производительность, поскольку он устраняет необходимость выполнения нескольких запросов.

0 голосов
/ 02 февраля 2011

Возможно, вы захотите взглянуть на функцию множественных активных наборов результатов (MARS), которая была запущена в SQL Server 2005. Вы можете найти информацию здесь:

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

Я не пробовал это, но звучит так, как будто это касается того, что вы пытаетесь сделать.

Я не уверен, будет ли он работать с PHP, но стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...