所以我需要更新表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 :(得分:1)
您要做的事情明确记录为正确:
以下语句中的第二个赋值将col2设置为 当前(更新)col1值,而不是原始col1值。结果 是col1和col2具有相同的值。这种行为不同于 标准SQL。
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
我认为问题是多表更新,其中set
从早期表中提取值。
您可以使用变量解决此问题。我不是百分百肯定,但以下值得一试:
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
子句以便单个表。唉,目前尚不清楚多个表是否总是如此。
如果没有,您可以使用两次更新。