2013-04-11 69 views
-1

即时通讯尝试使用多更新统计信息更新mysql表。
我试过我做多选的方式,但它给错误。
用多语句更新多记录单个mysql表吗?

UPDATE (
    UPDATE resources SET resources.resourcecount = resources.resourcecount - '100' 
    WHERE resourcetype = '1' 
    ), 
    (
     UPDATE resources SET resources.resourcecount = resources.resourcecount - '250' 
    WHERE resourcetype = '2' 
    ), 
    (
     UPDATE resources SET resources.resourcecount = resources.resourcecount - '300' 
    WHERE resourcetype = '3' 
    ), 
     (
     UPDATE resources SET resources.resourcecount = resources.resourcecount - '600' 
    WHERE resourcetype = '4' 
    ) 

我不知道,如果它有可能通过查询本身或者我应该使用PHP循环做到这一点?

+0

什么是你想怎么办?只需按照[UPDATE语法](http://dev.mysql.com/doc/refman/5.6/en/update.html),它就可以工作。 – Jocelyn 2013-04-11 02:08:23

+0

*嵌套更新* ??正如@Jocelyn提到的那样,在你决定使用你的代码之前,你看过你正在使用的更新类型吗? – bonCodigo 2013-04-11 08:55:27

回答

1

如果你只是减去100时resourcetype是1,2,3或4,你可以这样做:

UPDATE resources 
    SET resources.resourcecount = resources.resourcecount - 100 
    WHERE resourcetype IN ('1', '2', '3', '4') 
+1

如果'resourcetype'是一个'char',不要使用'BETWEEN'。字符串'12'介于'1'和'2'之间。 – Barmar 2013-04-11 02:13:47

+0

@ Dr.Neo - 请参阅上面的Barmar的评论以及最新的答案。为此,使用'IN'而不是'BETWEEN'。 – 2013-04-11 02:21:12

+0

@Barmar - 我刚刚发表了一条评论,感谢你,但我现在没有看到它。所以谢谢!我知道比那真的更好:) – 2013-04-11 02:21:59

0
$updateSql = "UPDATE resources SET resources.resourcecount = resources.resourcecount - '100' 
    WHERE resourcetype = '1';"; 

$updateSql .= "UPDATE resources SET resources.resourcecount = resources.resourcecount - '100' 
    WHERE resourcetype = '2';"; 

mysqli_multi_query($link,$updateSql); 
+0

在查询之间需要分号。 – Barmar 2013-04-11 02:11:49

+0

我确实把分号,我只是连接其他查询以及。它应该工作 – Marc 2013-04-11 02:18:16

+0

我的意思是你需要在字符串内部的查询之间使用分号,而不是在PHP语句之间使用分号:'$ updateSQL。=“; UPDATE ...”'。 – Barmar 2013-04-11 02:24:27