Mysql 使用if或case有条件地更新表数据
我有两张结构相同的桌子。表1保存了缓和后的数据,表2保存了其余数据 表1 其发展方式大致如下: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语言中,无法使
$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