2015-03-13 66 views
0

im试图更新表中所有需要不同where子句的单个查询中的多个列。我不是在惊人的SQL,并努力寻找谷歌的帮助。我尝试实现这样的如何使用mySQL中的不同where子句更新多个列

UPDATE $table 
SET meta_value = 'john', 
    meta_value = 'v1234' 
WHERE meta_key = 'name' AND post_id=$post_id, 
     meta_key = 'trak' AND post_id=$post_id" 

的想法是,第一组匹配的第一个WHERE,并且第二盘比赛第2 WHERE等。理想的ID可以做很多的这些。任何想法如何我可以实现这一目标?

+0

有你想要做这样一个理由吗? – Minh 2015-03-13 19:44:49

+0

类似于:http://stackoverflow.com/questions/29019317/update-multiple-rows-mysql/29019502#29019502 – xQbert 2015-03-13 19:46:57

回答

2
Update $table 
set meta_value = CASE WHEN meta_key = 'name' then 'john' 
         WHEN meta_key = 'trak' then 'v1234' end 
where post_Id = $post_ID 
+1

没有where子句,性能就不好。并不确定它会对其他值做什么。 – symcbean 2015-03-13 19:47:49

+0

是否有可能只添加一个where子句的id,因为这在这里总是一样的? – 2015-03-13 20:13:02

+0

是的,这将工作 – xQbert 2015-03-13 20:19:16

0
UPDATE $table 
SET meta_value = IF(meta_key='name','john','v1234') 
WHERE post_id=$post_id AND 
    meta_key IN ('trak','name') 
+0

这似乎工作,谢谢!你能否稍微解释一下。 IF子句中的表达式究竟意味着什么?如果我更新50个不同的meta_keys,这对性能有什么影响? – 2015-03-13 19:52:49

+0

啊。只是意识到这只会在它仅有2列的情况下起作用。但是我有500列,我想一次更新 – 2015-03-13 19:59:56

+0

真的吗? 500 *列*?然后你的模式需要修复。 – symcbean 2015-03-13 20:02:54