самый эффективный способ напечатать список имен, основанный на CSV, используя php и mysql - PullRequest
1 голос
/ 01 февраля 2010

У меня есть массив идентификаторов игроков. Как правило, там будет около 5 игроков, и вряд ли их будет больше дюжины:

$cplayers= array(1,2,5);

Я хочу отображать имена игроков в виде списка.

$query = "SELECT username,id FROM users ORDER BY id";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
$playercounter =0;
while ( $row = mysql_fetch_array($result) ) {

  if ($row['id'] == $cplayers[$playercounter]) {
    echo "<li>".$row['username']."</li>";
    $playercounter++;
    }
  }

Так что я уверен, что это не самый эффективный способ сделать это. Будет ли лучше делать отдельные запросы? Также есть ли хороший способ выйти из цикла while после выполнения $cplayers?

Ответы [ 4 ]

0 голосов
/ 14 февраля 2010

Что ж, очевидно, ответ скорее состоит в том, чтобы нормализовать мою базу данных, иметь отдельную (третью) таблицу для объединения двух, а не использовать массив со второй таблицей.

0 голосов
/ 01 февраля 2010

просто измените ваш запрос на:

$query = "SELECT username,id FROM users WHERE id IN (".implode(",",$cplayers).")ORDER BY id";

это вернет нужных игроков, которых вы ищете.

0 голосов
/ 01 февраля 2010

Исходя из того, как я это интерпретирую, я бы использовал предложение MySQL IN, например,

$id_list= array(1,2,5);
$sql= 'SELECT username FROM users WHERE id IN('. join(",",$id_list) .') ORDER BY id';
$result= mysql_query($sql) OR die(mysql_error());
while($row= mysql_fetch_assoc($result)) {
  echo "<li>{$row['username']}</li>";
}

Это предназначено только для тех значений идентификатора в списке, это то, что вы хотите?

0 голосов
/ 01 февраля 2010

Возвращает только тех игроков, для которых у вас есть идентификаторы:

$ids = implode($cplayers);
$query = "SELECT username,id FROM users WHERE id IN(" . $ids . ") ORDER BY id";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...