2011-02-01 12 views
0

OK 그래서 SQL Server 2008에서 PHP를 통해 html 테이블로 작업에 대한 데이터를 가져옵니다. 각 작업은 여러 작업을 수행 할 수 있습니다. 나는 while 루프를 사용하고있다. (while 'outer'while) 그리고 다른 루프는 이전 루프의 셀들 중 하나의 작업을 보여준다. 나는 'inner'while 루프를 빠져 나왔지만 'outer'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>"; 
       } 
+0

[PHP - 중첩 된 mysql_fetch_array() 문제로 인해 나를 미치게 만들 수 있음] (http://stackoverflow.com/questions/2277855/php-problem-with-nested-mysql-fetch-array-driving-me- 미친) – marcog

+0

sqlsrv 드라이버에는 비슷한 결과를 보이는 data_seek 함수와 비슷한 기능이 없습니다. 비슷한 예제 – Rob

답변

2

PHP의 SQL Server 드라이버와 동일한 연결에서 열려있는 결과 집합을 여러 개 가질 수 있다고 생각하지 않습니다.

여기에 몇 가지 옵션이 있습니다.

  1. 두 개의 다른 데이터베이스 연결을 사용하십시오. 하나는 외부 쿼리 용이고 다른 하나는 내부 쿼리 용입니다.

  2. 두 개의 테이블을 결합하고 Job_ID으로 정렬 한 다음 코드에서 논리를 사용하여 한 Job_ID에서 다른 것으로 변경할 때를 결정하면됩니다.

옵션 2는 여러 쿼리를 수행 할 필요가 없으므로 아마도 최상의 성능을 제공합니다.

+0

+1, 우리는 옵션 2를 사용합니다. –

+0

+1 옵션 2에 대해서 – xzyfer

+0

저는 여러분이 ' 다시 말하지만 지금까지 내가 2 개의 작업을 각각 2 개의 작업으로 가지고 있다면 이것이 하나의 셀에 2 개의 값을 갖는 2 개의 행보다는 4 개의 행을 남겨 둡니다. 하지만 어쩌면 나는 정말로 기본적인 것을 간과 할 것입니다. – Rob

0

당신은 그것을 여기에 2005 년 당신은 정보를 찾을 수 있습니다 SQL 서버에서 시작 다중 활성 결과 집합 (MARS) 기능을 조사 할 수 있습니다이 :

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

나는이 그것을하지만 시도하지 않은 당신이하려고하는 것을 다루는 것처럼 들립니다.

PHP에서 작동할지 모르겠지만 시도해 볼 가치가 있습니다.