好的,所以我将作业的数据从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>";
}
答案 0 :(得分:2)
我不相信你可以在PHP的sql server驱动程序的同一连接上有多个打开的结果集。
你有几个选择。
使用两个不同的数据库连接,一个用于外部查询,另一个用于内部查询。
只需执行一个查询,连接两个表并按Job_ID
排序,然后在代码中使用逻辑来确定何时从一个Job_ID更改为另一个。
选项2可能会提供最佳性能,因为它可以避免进行多次查询。
答案 1 :(得分:0)
您可能希望查看在SQL Server 2005中启动的多个活动结果集(MARS)功能。您可以在此处找到信息:
http://msdn.microsoft.com/en-us/library/h32h3abf(v=VS.90).aspx
我没有试过这个,但听起来它解决了你想要做的事情。
我不确定它是否适用于PHP,但值得尝试。