Как заказать в цикле foreach? - PullRequest
0 голосов
/ 19 марта 2011

Фон: панель управления, которая позволяет пользователям с определенной «ролью» (читай: ранг) создавать и поддерживать суб-пользователей.Существует цикл foreach (), который отображает всех подпользователей, связанных с их учетной записью, в текстовые поля для удобного редактирования.Хотя он все еще находится в стадии разработки, я застрял, пытаясь упорядочить запрос, чтобы субпользователи отображали в том порядке, в котором они были созданы.

Я понимаю, что причина, по которой он не будет их заказывать, связана только с запросомвыбирая одну запись в цикле, поэтому сортировать нечего.Проблема возникает из-за того, что запрос должен находиться внутри цикла из-за значения массива в поле 'username', поскольку он динамический на каждом проходе цикла.

       // 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 />";
   }

РЕШЕНИЕ:

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

1 Ответ

1 голос
/ 19 марта 2011

Вы можете сделать что-то вроде этого:

$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());

По сути, преобразуйте ваш массив имен пользователей в предложение "где в", чтобы один запрос извлекал ВСЕ соответствующие записи, которые затем можно упорядочить в запросе.

...