2013-06-04 70 views
1

我有兩個結構相同的表。其餘爲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時,才需要更新table1table2。這一地位來源於一個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 updatetable2

+0

你可以不添加到表2的AFTER UPDATE觸發器嗎?這似乎是最合乎邏輯的放置代碼的地方。 – phillyd

+0

編寫一個存儲過程,該存儲過程有兩個更新,一個爲所有傳入記錄更新一個表,另一個爲只有那些具有相應狀態的記錄更新表2。 –

+0

@phillyd觸發器僅在'table2'上。 – jmenezes

回答

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 
0

有一個在SQL語言來更新使用一個UPDATE語句中兩個不同的表沒有辦法。因此,這種類型的邏輯應該在中間層(你的PHP代碼)中完成。

+0

我只需要更新一個。 '如果status = 0(同時更新--sql在問題中)elseif staus = 1(只更新table2)'這是如果我堅持的部分。 – jmenezes

+0

@jmenezes - 'if status = 0(update both')。你是不是說當狀態爲零時你正在更新table1和table2? – Thomas

+0

好吧,只更新'table1'我可以在那裏使用第二個'sql' 。然後,可以用'if'來實現所有這些來自php的狀態嗎? – jmenezes