2017-02-26 83 views
0

因此,我需要更新表scores並使用列won的更新值更新第二個表tbl_users。到目前爲止,代碼更新scores,但使用的won舊值的第二表更新:一次更新兩個表,使用第一個表中的值

UPDATE scores a 
left join tbl_users b on 
    a.uid = b.userID 
SET a.won = CASE 
WHEN a.nright = '0' THEN '0' 
WHEN a.nright = '1' THEN '25' 
WHEN a.nright = '2' THEN '50' 
WHEN a.nright = '3' THEN '100' 
WHEN a.nright = '4' THEN '200' 
WHEN a.nright = '5' THEN '400' 
WHEN a.nright = '6' THEN '700' 
WHEN a.nright = '7' THEN '1000' 
END, 
b.pts=b.pts+a.won, 
b.pts_total=b.pts_total+a.won 
WHERE a.uid=$user AND b.userID=$user 
+0

正在更新的字段的實際順序可能與sql語句中指定的順序不同,並且通常在第一次更改之前獲取整個現有記錄。您需要重複使用韓元值在所有其他表達式中計算新韓元值的表達式。 – Shadow

+0

您可以共享架構和示例數據嗎? –

回答

1

你想要做什麼明確記載是正確的:

在下面的第二次分配語句將col2設置爲 當前(更新)的col1值,而不是原始col1值。結果 是col1和col2具有相同的值。此行爲與標準SQL 不同。

UPDATE t1 SET col1 = col1 + 1, col2 = col1; 

我認爲這個問題是多表更新,其中set拉從早期表中的值。

您可以使用變量修復此問題。我不是100%肯定,但以下是值得一試:

UPDATE scores s JOIN 
     tbl_users u 
     ON s.uid = .uuserID 
    SET s.won = (@w := (CASE WHEN s.nright = '0' THEN '0' 
           WHEN s.nright = '1' THEN '25' 
           WHEN s.nright = '2' THEN '50' 
           WHEN s.nright = '3' THEN '100' 
           WHEN s.nright = '4' THEN '200' 
           WHEN s.nright = '5' THEN '400' 
           WHEN s.nright = '6' THEN '700' 
           WHEN s.nright = '7' THEN '1000' 
         END) 
       ), 
     u.pts = u.pts + @w, 
     u.pts_total = u.pts_total + @w 
    WHERE s.uid = $user ; 

文檔有力地表明,set條款是爲了處理單個表。唉,目前還不清楚這是否適用於多個表格。

如果不是,您可以使用兩個更新。

+0

它的工作,我知道變量會這樣做,但我不知道正確的語法。非常感謝。 – user1542894

相關問題