Php 使用CASE-WHEN-THEN语句更新MySQL表中的多行-不起作用

Php 使用CASE-WHEN-THEN语句更新MySQL表中的多行-不起作用,php,mysql,sql-update,case,case-when,Php,Mysql,Sql Update,Case,Case When,这让我快发疯了,所以任何帮助都将不胜感激 我试图用用户给定的数字来增加表中特定行的点数总数。我有一些PHP根据表单输入动态生成此语句: UPDATE users SET points = CASE userID WHEN 11 THEN (points + 1) WHEN 16 THEN (points + 6) WHEN 7 THEN (points + 7) WHEN 10 THEN (points + 10) WHERE userID IN (11

这让我快发疯了,所以任何帮助都将不胜感激

我试图用用户给定的数字来增加表中特定行的点数总数。我有一些PHP根据表单输入动态生成此语句:

UPDATE users SET points = CASE userID 
    WHEN 11 THEN (points + 1) 
    WHEN 16 THEN (points + 6) 
    WHEN 7 THEN (points + 7) 
    WHEN 10 THEN (points + 10) 
WHERE userID IN (11,16,7,10) 
END
由于存在多个访问器的问题,我不想将值存储在PHP变量中。

您的语法错误

您需要在WHERE之前加上“END”:

UPDATE users
    SET points =
        (CASE userID 
             WHEN 11 THEN (points + 1) 
             WHEN 16 THEN (points + 6) 
             WHEN 7 THEN (points + 7) 
             WHEN 10 THEN (points + 10) 
         end)
WHERE userID IN (11,16,7,10)
我重新格式化了查询。我想把“CASE”的“END”放在同一列中,以防止出现这种问题。

您的语法是错误的

您需要在WHERE之前加上“END”:

UPDATE users
    SET points =
        (CASE userID 
             WHEN 11 THEN (points + 1) 
             WHEN 16 THEN (points + 6) 
             WHEN 7 THEN (points + 7) 
             WHEN 10 THEN (points + 10) 
         end)
WHERE userID IN (11,16,7,10)

我重新格式化了查询。我特别注意将“CASE”的“END”放在同一列中,以防止出现此类问题。

快速浏览一下,我会说END语句需要放在WHERE语句之前。我会在该CASE表达式中包含一个
ELSE points
。查询时不需要这样做,但只是为了防止在列表中添加另一个值。。。我希望保持
points
列的值不变,而不是将其设置为NULL。快速看一眼,我会说END语句需要放在WHERE语句之前。在这种情况下,我将包含一个
ELSE points
表达式。查询时不需要这样做,但只是为了防止在列表中添加另一个值。。。我想保持
points
列的值不变,而不是将其设置为NULL。非常感谢,几分钟内就解决了几个小时的辛苦工作。我真希望我能早点问:)太谢谢你了,几小时的辛劳几分钟就解决了。我要是早点问就好了:)