1

我有两个结构相同的表。Table1保存经过审核的数据,table2保存其余数据。

表格1

+--------+--------+---------------+--------+-------- ---+
| “身份证” | “名字” | “说明” | “类型” | “国家” |
+--------+--------+---------------+--------+-------- ---+
| "1" | “一个” | "x" | "1" | “美国” |
| "2" | "b" | "x" | "1" | “英国” |
+--------+--------+---------------+--------+-------- ---+

表 2

+-----+------------+-----------------+--------+--- --------+----------+
| “身份证” | “名字” | “说明” | “类型” | “国家” | “状态” |
+-----+------------+-----------------+--------+--- --------+----------+
| "1" | “标题1” | “说明1” | "1" | “美国” | "2" |
| "2" | “标题2” | 《说明2》 | "1" | “英国” | "2" |
+-----+------------+-----------------+--------+--- --------+----------+

我运行下面的 sql 以table 1使用来自 的数据进行更新table 2,它运行良好。问题是,版主可以接受或拒绝更新。通过将statusin设置为table2来接受更新0。拒绝是通过将其设置为 来完成的1

仅当版主设置为 时,才需要进行从table1到的更新。该状态来自一个 php 脚本,例如table2status0updatestatus.php?status=0&id=1&country=US

可以做一个sql,如果传入statuswhere 0thenupdate both tables elseif status = 1 then update only table2 set status = 1 where id=1 and country =us

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)

我可以将 if 与表内的数据一起使用,但如何才能完成这样的事情呢?

注意 我不能使用触发器,因为我已经使用了after update一个table2

4

2 回答 2

0

SQL 语言无法使用单个 Update 语句更新两个不同的表。因此,这种类型的逻辑应该在中间层(您的 PHP 代码)中完成。

于 2013-06-04T13:51:11.247 回答
0

所以我用一个存储过程走到了这一步。

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
于 2013-06-04T15:31:09.593 回答