Как обновить один столбец и несколько строк в MySQL, используя один запрос

Таблица MYSQL -> T(игрок,id)

Я пытаюсь обновить эту таблицу MYSQL для того же (только одного) идентификатора и 10 разных игроков. Я сделал это.

for($k=0;$k<10;$k++)
    {       
       echo $newPlayer[$k];

       $que = "UPDATE `players` SET `player`='".$newPlayer[$k]."' WHERE `id`='".$id."'";
       $db_con->exec($que);
    }

когда я отображаю массив $newPlayer, он отображает правильные значения, поэтому запрос не работает.

11 таблиц должны быть добавлены в таблицу 'T' с 11 различными значениями игрока и одинаковым значением идентификатора. но только одна ценность игрока добавлена ​​к столу. Зачем??

1 ответ

update оператор используется для обновления данных, а не для вставки данных. Таким образом, с обновлением вы можете изменить только то, что уже находится на столе, ничего нового не будет создано.

Если вы хотите вставить новые данные, вы должны использовать insert заявление.

Командой, которую вы публикуете, вы говорите в базу данных

Эй, парень, измени атрибут player со значением '".$newPlayer[$k]."' где idстола playear является '".$id."'"

Так как обсуждено в комментариях, вот лучшее решение для вас:

update players p, 
  (select id, player, substring_index( substring_index(lst, ',', idx), ',', -1) as pl
     from (select p.*, @number := @number+1 as idx, lst 
             from players p,
                 (select @number := 0 as nb) n,
                 (select 'i,j,k,l,m,n,o,p' as lst) lst) x ) a 
set p.player = a.pl
where p.id = a.id 
  and p.player = a.player

Но для PHP вам придется сделать свой массив $newPlayer как строка, разделенная , без пробелов между ними.

Что-то вроде этого:

$newNames = implode(",",$newPlayer);

 $que = "update players p, 
      (select id, player, substring_index( substring_index(lst, ',', idx), ',', -1) as pl
         from (select p.*, @number := @number+1 as idx, lst 
                 from players p,
                     (select @number := 0 as nb) n,
                     (select '$newNames' as lst) lst) x ) a 
    set p.player = a.pl
    where p.id = a.id 
      and p.player = a.player";

$db_con->exec($que);

С этим вам не понадобится for

Другие вопросы по тегам