gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:08:35 26 4
gpt4 key购买 nike

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 数组时,它显示正确的值,所以查询不起作用。

应将 11 行添加到表“T”中,其中包含 11 个不同的玩家值和相同的 id 值。但只有一名球员的值(value)被添加到表中。为什么??

最佳答案

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

如果你想插入新数据,你应该使用insert语句。

通过您发布的命令,您正在对数据库说

嘿,伙计,将属性 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

关于php - 如何使用单个查询更新mysql中的单列和多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19609055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com