如何在一个查询中更新多行

时间:2017-02-16 10:30:40

标签: php mysql sql

我知道这些问题在这些论坛上可能会被问到太多次,但我真的找不到可靠的答案。他们都给出了不同的方法。

无论如何,我有这段代码来更新一行:

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1'";

是否可以更新同一查询中的多行?像这样:

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1',
        UPDATE $userName SET P1 = '$p1TUE' WHERE day = 'TUE1',
        UPDATE $userName SET P1 = '$p1WED' WHERE day = 'WED1'";

或者,要在一个查询中更新多行,是否必须共享标识符?

感谢。

编辑:评论中的建议似乎不起作用......

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1';
        UPDATE $userName SET P1 = '$p1TUE' WHERE day = 'TUE1';
        UPDATE $userName SET P1 = '$p1WED' WHERE day = 'WED1'";

3 个答案:

答案 0 :(得分:10)

使用case表达式:

UPDATE $userName
SET P1 = case day
         when 'MON1' then '$p1MON'
         when 'TUE1' then '$p1TUE'
         when 'WED1' then '$p1WED'
         end
where day IN ('MON1', 'TUE1', 'WED1')

答案 1 :(得分:0)

根据您的数据库引擎,您可以尝试这样的

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1'; UPDATE $userName SET P1 = '$p1TUE' WHERE day = 'TUE1'; UPDATE $userName SET P1 = '$p1WED' WHERE day = 'WED1'"

$sql = "UPDATE $userName SET P1 = '$p1MON' WHERE day = 'MON1' go  UPDATE $userName SET P1 = '$p1TUE' WHERE day = 'TUE1' go  UPDATE $userName SET P1 = '$p1WED' WHERE day = 'WED1'"

使用;或GO(取决于您的数据库)单独的指令,然后执行,然后在一个查询"

答案 2 :(得分:0)

是字段日的唯一关键字段吗?

如果是这样,您可以在重复密钥更新语法上使用

INSERT INTO $userName(day, P1) VALUES
('MON1', '$p1MON'),
('TUE1', '$p1TUE'),
('WED1', '$p1WED')
ON DUPLICATE KEY UPDATE P1=VALUES(P1)