无法确定ORDER BY的存放位置



至少我知道不该把它放在哪里。

我从前任那里继承了这个项目。我对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";

这是因为第二个查询只返回一条记录。第一个查询是得到列表的内容,因此订单应该放在哪里。

最新更新