[英]Update two tables at once, using values from first table
所以,我需要更新表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
您要做的事情已明確記錄為正確的:
以下語句中的第二個賦值將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
子句。 las,目前尚不清楚對於多個表是否總是如此。
如果沒有,則可以使用兩個更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.