我有兩個結構相同的表。其餘爲Table1
,其餘爲table2
。使用if或case有條件地更新表數據
表1
+------+--------+---------------+--------+-----------+ | "id" | "name" | "description" | "type" | "country" | +------+--------+---------------+--------+-----------+ | "1" | "a" | "x" | "1" | "US" | | "2" | "b" | "x" | "1" | "UK" | +------+--------+---------------+--------+-----------+
表2
+------+-----------+-----------------+--------+-----------+----------+ | "id" | "name" | "description" | "type" | "country" | "status" | +------+-----------+-----------------+--------+-----------+----------+ | "1" | "Title 1" | "Description 1" | "1" | "US" | "2" | | "2" | "Title 2" | "Description 2" | "1 " | "UK" | "2" | +------+-----------+-----------------+--------+-----------+----------+
我爲了從table 2
更新table 1
與數據運行以下SQL和它工作得很好。問題是,版主可以接受更新或拒絕更新。通過將table2
中的status
設置爲0
來接受更新。拒絕是通過將其設置爲1
來完成的。
僅當主持人將status
設置爲0
時,才需要更新table1
到table2
。這一地位來源於一個PHP腳本像updatestatus.php?status=0&id=1&country=US
可以在SQL可以這樣做,如果傳入status
其中0
然後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)
我可以使用如果一起使用表中的數據,但如何可以這樣做呢?
注意 我不能使用觸發器,因爲我已經使用了一個after update
上table2
你可以不添加到表2的AFTER UPDATE觸發器嗎?這似乎是最合乎邏輯的放置代碼的地方。 – phillyd
編寫一個存儲過程,該存儲過程有兩個更新,一個爲所有傳入記錄更新一個表,另一個爲只有那些具有相應狀態的記錄更新表2。 –
@phillyd觸發器僅在'table2'上。 – jmenezes