1

構造が同一の 2 つのテーブルがあります。Table1モデレートされたデータをtable2保持し、残りを保持します。

表1

+--------+--------+---------------+--------+-------- ---+
| | "ID" | "名前" | "説明" | "タイプ" | "国" |
+--------+--------+---------------+--------+-------- ---+
| | "1" | "a" | "×" | "1" | "米国" |
| | "2" | "b" | "×" | "1" | "イギリス" |
+--------+--------+---------------+--------+-------- ---+

表 2

+-----+----------+-----------------+--------+--- ------+----------+
| | "ID" | "名前" | "説明" | "タイプ" | "国" | "ステータス" |
+-----+----------+-----------------+--------+--- ------+----------+
| | "1" | 「タイトル1」 | "説明 1" | "1" | "米国" | "2" |
| | "2" | 「タイトル2」 | "説明 2" | "1" | "イギリス" | "2" |
+-----+----------+-----------------+--------+--- ------+----------+

table 1からのデータで更新するために以下のSQLを実行しましたが、table 2うまくいきました。問題は、モデレーターが更新を承認または拒否できることです。更新を受け入れるには、statusinを に設定table20ます。に設定すると拒否されます1

table1からへの更新は、モデレーターが に設定してtable2いる場合にのみ実行する必要があります。そのステータスは、次のようなphpスクリプトから取得されますstatus0updatestatus.php?status=0&id=1&country=US

status受信した0場合にSQLを実行できますかupdate 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 言語には、1 つの Update ステートメントを使用して 2 つの異なるテーブルを更新する手段がありません。したがって、このタイプのロジックは中間層 (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 に答える