Выберите игроков в команду и отметьте в БД как выбранных

у меня есть одна таблица с именами игроков с 2 столбцами: игроки и статус

Мне нужно выбрать уникальные случайные команды! В каждой команде есть X игроков, так как: Y базовый и Z поворотный Y и Z его заданная форма ввода

Если вставить 3 для базы и 2 для опорных то результат должен быть как 3 команды или 3 игрока:

команда 1 База 1 База 1 База 2

команда 2 База 1 База 1 База 2

команда 3 База 1 База 1 База 2

После того, как я сгенерирую команды, я должен иметь возможность установить статус «выбран». Если мне нужно создать другую команду, все пользователи со статусом «выбрано» не могут быть использованы в другой новой команде!

В настоящее время я использую:

    $nteams=$_POST['teams']; 
    $nbase=$_POST['base'];
    $npivots=$_POST['pivots']; 
    $allplayers=$nteams*($nbase+$npivots);
    require_once "connect_to_mysql.php"; 
    $sqlCommand = "SELECT id FROM players ORDER BY RAND() LIMIT $allplayers";
    $query = mysql_query($sqlCommand) or die (mysql_error()); 
    if(mysql_num_rows($query)<$allplayers) // sanity
      die('Not enough players!');
    else
      for($team=1;$team<=$nteams;$team++)
        {
        for($base=1;$base<=$nbase;$base++)
          {
          $row = mysql_fetch_array($query);
          echo "Team $team Base $base = {$row['id']}<br />";
          }
        for($pivot=1;$pivot<=$npivots;$pivot++)
          {
          $row = mysql_fetch_array($query);
          echo "Team $team Pivot $pivot  = {$row['id']}<br />";
          }
        }
    mysql_close();

person custombrands    schedule 05.11.2013    source источник
comment
Вы должны полностью использовать подготовленные операторы для своего $sqlCommand. Это делает ваш скрипт более безопасным. проверьте гугл для этого   -  person some_coder    schedule 05.11.2013


Ответы (1)


  1. Добавьте WHERE status<>'selected' к своему заявлению $sqlCommand
  2. Сохраните все идентификаторы чтения из базы данных в массиве, например. $selectedIds
  3. Запустить скрипт обновления UPDATE players SET status='selected' WHERE id IN ('.implode(',', $selectedIds).')

Боковые примечания:

  1. Попробуйте переписать весь цикл. Это можно сделать за один цикл while и один курсор/флаг - пусть это будет домашним заданием :)
  2. Остерегайтесь SQL-инъекций
  3. Вы можете обернуть SELECT и UPDATE в транзакцию, чтобы избежать несогласованности и конфликтов.
person sebapalus    schedule 05.11.2013
comment
С наилучшими пожеланиями за попытку помочь мне! - person custombrands; 05.11.2013