这是我的代码:
$sqlc = "SELECT DISTINCT UserID, OrgID, OrgName, StateID, StateName FROM vw_AgentService WHERE UserID = " . $id . "ORDER BY StateID";
$stmtc = sqlsrv_query( $conn, $sqlc );
if( $stmt === false) {
die( print_r( sqlsrv_errors(), true) );
}
$current_state = null;
while( $rowc = sqlsrv_fetch_array( $stmtc, SQLSRV_FETCH_ASSOC) ) {
if ($rowc["StateID"] != $current_state) {
$current_state = $rowc['StateID'];
echo "<h4>".$rowc['StateName']."</h4>";
}
echo "<p>".$rowc['OrgName']."</p>";
};
我从中提取数据的表为每个组织都有一行,每个组织都包含一列,用于标识其对应的美国州。输出显示状态一次,然后列出该状态中的所有组织,如下所示:
<h4>Federal (non-State)</h4>
<p>Environmental Protection Agency<p>
<h4>Texas</h4>
<p>Texas Legislature</p>
<p>Texas Commission on Environmental Quality</p>
我想要但无法弄清楚的是将状态标题和组织列表包装在他们自己的 DIV 中,以便我可以将它们显示为列,而不是一直向下的直线列表,如下所示:
<div class="StateOrgs">
<h4>Federal (non-State)</h4>
<p>Environmental Protection Agency<p>
</div>
<div class="StateOrgs">
<h4>Texas</h4>
<p>Texas Legislature</p>
<p>Texas Commission on Environmental Quality</p>
</div>
我怎样才能做到这一点?
不得不给自己写一个小表格,这样我就可以想象你想讲的整个故事。重写了我的答案以更好地适应您要做的事情。你需要一个有条件的内部查询(如果需要稍微调整,请编辑它,但你明白了)。
while( $rowc = sqlsrv_fetch_array( $stmtc, SQLSRV_FETCH_ASSOC) ) {
if ($rowc["StateID"] != $current_state) {
$current_state = $rowc['StateID'];
echo "<div class='StateOrgs'>";
echo "<h4>".$rowc['StateName']."</h4>";
while($innerqry = sqlsrv_fetch_array($stmtc, SQLSRV_FETCH_ASSOC)){
if($innerqry['StateID']==$current_state){
echo "<p>".$innerqry['OrgName']."</p>";}
}
echo "</div>
}
};
这是我必须输入的内容才能可视化您要执行的操作:
SELECT DISTINCT UserID, OrgID, OrgName, StateID, StateName
FROM vw_AgentService WHERE UserID = " . $id . "ORDER BY StateID
stateid statename
org 5 fed001 Federal
org 3 fed001 Federal
org 1 mid001 Maryland
org 4 mid001 Maryland
org 2 tid002 Tennesee
<div>
<h4>Fed</h4>
<p>org 5</p>
<p>org 3</p>
</div>
<div>
<h4>Maryland</h4>
<p>org 1</p>
<p>org 4</p>
</div>