如何使用单个查询更新mysql中的单列和多行

时间:2013-10-26 16:30:25

标签: php mysql pdo insert-update

MYSQL表 - > T(播放器,ID)

我正在尝试为同一个(只有一个)id和10个不同的玩家更新这个MYSQL表。 我做到了。

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

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

当我回显$ newPlayer数组时,它会显示正确的值,以便查询无效。

应该在表'T'中添加11行,其中包含11个不同的播放器值和相同的id值。 但只有一个玩家值被添加到表中。为什么??

1 个答案:

答案 0 :(得分:0)

update语句用于更新数据而非插入数据。因此,通过更新,您只能更改表中已有的内容,不会创建任何新内容。

如果要插入新数据,则应使用insert语句。

使用您发布的命令,您要对数据库说

嘿,man将属性player更改为值'".$newPlayer[$k]."',其中idplayear'".$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