2016-04-19 153 views
0

我知道至少在哪裏不放。不知道在哪裏放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通常會在年底,但我不知道我理解的邏輯,因爲在這一點上它只是附和我已經有數據。

+0

你說得對,當你通過UserID獲取一行時,你不會訂單。但是,處理UserID的順序來自第一個SELECT語句(位於代碼塊的頂部),並且您可以對該查詢使用ORDER BY – stifin

+0

在bobby表在您的sql中出現不受歡迎的外觀之前,您應該閱讀本文服務器。 http://bobby-tables.com/php.html –

+0

我被告知Bobby Tables問題。截至目前,我的意思是按照用戶類型來分類。在我甚至可以開始解決這個問題之前,我還有很多需要了解SQL注入的知識。但是,謝謝你的擡頭。 – hederaLC

回答

0

應將ORDER BY子句添加到SQL語句的末尾。

類似這樣;

$sqlc = "SELECT * FROM vw_UserPhotoPath WHERE UserID = ".$row["UserID"] . " ORDER BY UserType"; 

這是假設UserType在您的源視圖(vw_UserPhotoPath)中。

編輯1 - 如果已經閱讀問題妥善

實際上,你需要你的ORDER BY上的第一個SQL調用,即;

$sql = "SELECT UserID FROM vw_AgentService WHERE StateID = ".$state." AND OrgID = ".$org. "AND ServiceID = ".$service . " ORDER BY UserType"; 

這是因爲第二個查詢只返回一條記錄。這第一個查詢是什麼獲取列表,以便應該放置順序。

+0

這不是問題的線,它發生在行:'$ sqlb =「SELECT * FROM vw_UserInfo WHERE UserId =」。$ row [「UserID」]。 「AND(UserType = 1 OR UserType = 2)ORDER BY UserType DESC,UserLastName」; // Herein the problem' – Aurel

+0

我的歉意,是的,ORDER BY顯示的位置是正確的。我已經更新了我的回覆以反映這一點。 –