Как обновить один столбец и несколько строк в 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