Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用if或case有条件地更新表数据_Mysql_Sql - Fatal编程技术网

Mysql 使用if或case有条件地更新表数据

Mysql 使用if或case有条件地更新表数据,mysql,sql,Mysql,Sql,我有两张结构相同的桌子。表1保存了缓和后的数据,表2保存了其余数据 表1 其发展方式大致如下: $status = 0;//Php //sql if ($status = 0) then (run the above update) elseif ($status = 1) then (run update for only table2) 我可以将if与表中的数据一起使用,但是这样的事情怎么做呢 注 我不能使用触发器,因为我已经在表2的update之后使用了触发器。在SQL语言中,无法使

我有两张结构相同的桌子。表1保存了缓和后的数据,表2保存了其余数据

表1

其发展方式大致如下:

$status = 0;//Php

//sql
if ($status = 0) then (run the above update) 
elseif ($status = 1) then (run update for only table2)
我可以将if与表中的数据一起使用,但是这样的事情怎么做呢


我不能使用触发器,因为我已经在表2的update之后使用了触发器。在SQL语言中,无法使用单个update语句更新两个不同的表。因此,这种类型的逻辑应该在PHP代码的中间层完成。

所以我用一个存储过程来了。

CREATE DEFINER=`root`@`localhost` PROCEDURE `p`(IN `status` TINYINT, IN `id` INT, IN `Country` CHAR(2))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    IF status = 1 THEN
        UPDATE table2 set status = 1 where id = id and country = country;
    ELSEIF status = 0 THEN
        UPDATE table1 a
        INNER JOIN table2 b
        ON a.id = b.id and a.country = b.country
        SET a.name = b.name,    a.description = b.description
        WHERE a.id=id;
    END IF;
END

您不能在表2中添加更新后触发器吗?这似乎是放置代码最合乎逻辑的地方。编写一个存储过程,它有两个更新,一个更新一个表中的所有传入记录,另一个只为那些具有适当状态的记录更新表2。@phillyd触发器仅在表2上。@CharlesBretana如果elseI只需要更新一条记录,我可以在存储过程中使用status的值吗。如果status=0,则更新两者-sql在问题中,如果status=1,则仅更新表2,则是if部分。@jmenezes-if status=0,则更新两者。您不是说当状态为零时您正在更新表1和表2吗?好的。这只更新了表1,我可以在那里使用第二个sql。但是,如果状态来自php,那么if可以用来实现所有这些吗?@jmenezes-您是否在询问是否可以在php中创建分叉代码,以决定是在两个语句中更新两个表还是更新一个表?
UPDATE table1 a
INNER JOIN table2 b
ON a.id = b.id
SET a.name = b.name,
a.description = b.description
WHERE a.id=1;
$status = 0;//Php

//sql
if ($status = 0) then (run the above update) 
elseif ($status = 1) then (run update for only table2)
CREATE DEFINER=`root`@`localhost` PROCEDURE `p`(IN `status` TINYINT, IN `id` INT, IN `Country` CHAR(2))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    IF status = 1 THEN
        UPDATE table2 set status = 1 where id = id and country = country;
    ELSEIF status = 0 THEN
        UPDATE table1 a
        INNER JOIN table2 b
        ON a.id = b.id and a.country = b.country
        SET a.name = b.name,    a.description = b.description
        WHERE a.id=id;
    END IF;
END