2011-03-18 15 views
0

背景:控制面板允許具有某個「角色」(讀取:級別)的用戶創建和維護子用戶。有一個foreach()循環,它將與其帳戶關聯的所有子用戶顯示在文本字段中,以便於編輯。儘管它仍在開發中,但我仍然試圖對查詢進行排序,以便子用戶按照創建順序顯示。如何在foreach循環中進行ORDER BY?

我知道它不會排序的原因是由於查詢只選擇每個循環中的一個條目,因此沒有任何可以排序的東西。問題出在查詢需要在循環內部,因爲在'用戶名'字段中的數組值,因爲它在循環的每次通過時都是動態的。

 // check for existing subusers 
    $findsubusers = mysql_query("SELECT * FROM `custportal` WHERE `parentid` = '". $_SESSION['id'] ."'"); 
    $subusernum = mysql_num_rows($findsubusers); 
    if ($subusernum > 0) { 
     // subusers present, print them to editable form 
     echo "<h2>Edit Existing Users</h2><br />"; 
     echo "<form method=\"post\" action=\"edit.php\">"; 
     for ($num=1; $num <= $subusernum; $num++) { 
      // print all subusers 
      $subuserinfo = mysql_fetch_array($findsubusers); 
      echo "<p>Name: "; 
      echo "<input type=\"text\" name=\"subusername[]\" value=\"". $subuserinfo['username'] ."\" /></p>"; 
      echo "<p>Password: "; 
      echo "<input type=\"text\" name=\"subuserpass[]\" value=\"". $subuserinfo['password'] ."\" /></p>"; 
      echo "<input type=\"hidden\" name=\"subuserid[]\" value=\"". $subuserinfo['id'] ."\" />";; 
     } 
      echo "<input type=\"submit\" name=\"submitchanges\" value=\"Submit Changes\" />"; 
      echo "</form><br /><br />"; 
    } 

SOLUTION:

$findsubusers = mysql_query("SELECT * FROM `custportal` WHERE `parentid` = '". $_SESSION['id'] ."' ORDER BY username ASC"); 
+0

更新了代碼片段,這個更相關。 – SQueryL 2011-03-21 13:27:50

+0

我是個白癡,問題解決了。 – SQueryL 2011-03-21 13:42:50

回答

1

你可以做這樣的事情:

$names = array() 
foreach ($_POST as $name) { 
    $names[] = "'" . mysql_real_escape_string($name) "'"; 
} 

$where_in = implode(",", $names); 

$query = "SELECT ... WHERE username IN ($where_in) ORDER BY username"; 
$stmt = mysql_query($query) or die(mysql_error()); 

基本上,你的用戶名的數組轉換成 「其中」 條款使單個查詢ALL取匹配的記錄,然後可以在查詢中進行排序。

+0

我不知道如何應用這個,但我更新了我發佈的代碼片段,因爲我意識到其他並不相關。 – SQueryL 2011-03-21 13:40:55