2013-08-04 26 views
0

我正在開發php數據庫庫存頁面,如下所述。我有一些我無法解決的複雜方程。請幫助我。我想從b表中增加值到a和從c減去值到

我有一個表名 「A」 與列X和Y具有值如下:

表在以下圖案 「A」

------------ 
X  Y 
------------ 
blue  0 
yellow 0 
brown 0 

表 「B」。

------------ 
X  Y 
------------ 
blue 50 
yellow 15 
blue 20 
brown 5 

同樣表「C」

------------ 
X  Y 
------------ 
blue 15 
yellow 10 
blue  5 
brown 5 

現在我想如果我加入表「B」紀錄提到它上面應該在表中的「A」進行更新與下面的公式。

"A"= "B"-"C"

結果應當是即

表 「A」

------------ 
X  Y 
------------ 
blue 20 
yellow 5 
brown 0 

在記錄表 「C」 方程式加法應的情況下相同的,如下所示:

請注意表「A」中的X值是DISTINCT,而其他表中的X值不是。

+0

你用什麼公式以藍色= 20在抵達終點? B有50 + 20藍色,C有15 + 5。不應該A = B-C是70-20 = 50? – ironcito

+0

70是x列(表B)中藍色的總和,20是X列(表C)中藍色的總和。 – user2649714

+0

對,根據你的公式,藍色應該是50。 – ironcito

回答

0
$results = array(); 

// Sum all from B 
foreach ($db->query('SELECT * FROM B')->fetchAll() as $row) 
{ 
    $results[$row['X']] += $row['Y']; 
} 

// Substract all from C 
foreach ($db->query('SELECT * FROM C')->fetchAll() as $row) 
{ 
    $results[$row['X']] -= $row['Y']; 
} 

// Insert result into A 
foreach ($results as $X => $Y) 
{ 
    $db->query("INSERT INTO A (X, Y) VALUES ('$X', '$Y')"); 
} 

這假定您已經創建了一個名爲$db的PDO對象。如果您使用的是其他數據庫擴展名,請對其進行調整。

0

一個可能的解決方案是使用AFTER INSERT觸發器表上BC

CREATE TRIGGER tg_b_after_insert 
AFTER INSERT ON b 
FOR EACH ROW 
    UPDATE a 
    SET y = 
    (
    SELECT 
    (
     SELECT SUM(y) 
     FROM B 
     WHERE x = NEW.x 
    ) - 
    (
     SELECT SUM(y) 
     FROM C 
     WHERE x = NEW.x 
    ) 
) 
    WHERE x = NEW.x; 

CREATE TRIGGER tg_c_after_insert 
AFTER INSERT ON c 
FOR EACH ROW 
    UPDATE a 
    SET y = 
    (
    SELECT 
    (
     SELECT SUM(y) 
     FROM B 
     WHERE x = NEW.x 
    ) - 
    (
     SELECT SUM(y) 
     FROM C 
     WHERE x = NEW.x 
    ) 
) 
    WHERE x = NEW.x; 

然後你只需插入新行BC

INSERT INTO B VALUES ('blue', 5); 
INSERT INTO C VALUES ('blue', 10); 

和觸發器保持在表AY值。

這裏是SQLFiddle演示

+0

@ user2649714它有幫助嗎?你的問題需要更多幫助嗎? – peterm

相關問題