至少我知道不该把它放在哪里。
我从前任那里继承了这个项目。我对PHP和SQL Server知之甚少,但我们到了。第一个while循环包含问题。我需要ORDER BY UserType,但很明显,它每次只订购一个条目,因为它在while循环中的位置。结果是,结果显示为一个用户类型,先按字母顺序显示,然后按字母顺序依次显示第二个用户类型。
谷歌和这里的搜索只是有一定的启发性,因为大多数例子似乎并没有那么复杂。这可能很简单,但我看不出来。任何帮助都将不胜感激。
$sql = "SELECT UserID FROM vw_AgentService WHERE StateID = ".$state.
"AND OrgID = ".$org.
"AND ServiceID = ".$service; //JOIN
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
die(print_r(sqlsrv_errors(), true));
}
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$sqlb = "SELECT * FROM vw_UserInfo WHERE UserId = ".$row["UserID"].
" AND (UserType = 1 OR UserType = 2) ORDER BY UserType DESC, UserLastName"; //Herein lies the problem
$stmtb = sqlsrv_query($conn, $sqlb);
if ($stmtb === false) {
die(print_r(sqlsrv_errors(), true));
}
while ($rowb = sqlsrv_fetch_array($stmtb, SQLSRV_FETCH_ASSOC)) {
$sqlc = "SELECT * FROM vw_UserPhotoPath WHERE UserID = ".$row["UserID"];
$stmtc = sqlsrv_query($conn, $sqlc);
if ($stmtc === false) {
die(print_r(sqlsrv_errors(), true));
}
while ($rowc = sqlsrv_fetch_array($stmtc, SQLSRV_FETCH_ASSOC)) {
if ($rowc['PhotoFilePath'] === null) {
echo "<a href="profile.php?id=".$rowb["UserID"].
"">".
"<li><img src="profile/blank-avatar.png" width="100" />";
} else {
echo "<a href="profile.php?id=".$rowb["UserID"].
"">".
"<li><img src="http://demo-bc.cmfirsttech.com:8081/".$rowc['PhotoFilePath'].
"" width="100" />";
}
}
echo $rowb["UserFirstName"].
" ".$rowb["UserLastName"].
"<br/><span class="info">".$rowb["UserTitle"].
", ".$rowb["UserCompany"]; // Should the ORDER BY actually go here?
//.</span></a></li>"; //rm </br>, add ", "
}
}
有人告诉我ORDER BY通常在最后,但我不确定我是否理解其中的逻辑,因为在这一点上,它只是在呼应我已经拥有的数据。
ORDER BY子句应该添加到SQL语句的末尾。
像这样的东西;
$sqlc = "SELECT * FROM vw_UserPhotoPath WHERE UserID = ".$row["UserID"] . " ORDER BY UserType";
这是假设UserType在源代码视图中(vw_UserPhotoPath)。
编辑1-应该正确阅读问题
实际上,在第一次SQL调用时就需要ORDERBY;
$sql = "SELECT UserID FROM vw_AgentService WHERE StateID = ".$state." AND OrgID = ".$org. "AND ServiceID = ".$service . " ORDER BY UserType";
这是因为第二个查询只返回一条记录。第一个查询是得到列表的内容,因此订单应该放在哪里。