Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何更新选定列表中的一个变量,并将其他变量设置为零?_Mysql - Fatal编程技术网

Mysql 如何更新选定列表中的一个变量,并将其他变量设置为零?

Mysql 如何更新选定列表中的一个变量,并将其他变量设置为零?,mysql,Mysql,我从post表中获取了此查询中的ID(要更新的行),这些ID作为grade表中的行,我希望将一个变量设置为1,将此数组中的其他变量设置为0,并保持grade表中的其余行不变: SELECT ID FROM posts WHERE post_parent = '' AND post_status IN ( '') AND post_type = '' 我想学习如何如上所述更新成绩表。谢谢 您可以使用此解决方案: UPDATE grade g JOIN post p ON g.id

我从post表中获取了此查询中的ID(要更新的行),这些ID作为grade表中的行,我希望将一个变量设置为1,将此数组中的其他变量设置为0,并保持grade表中的其余行不变:

SELECT ID FROM posts
WHERE post_parent = ''
AND post_status IN ( '')
AND post_type = ''

我想学习如何如上所述更新成绩表。谢谢

您可以使用此解决方案:

UPDATE grade g
JOIN   post p ON g.id          = p.id
             AND p.post_parent = $parent_id
             AND p.post_status = $post_status
             AND p.post_type   = $post_type
SET    g.grade = CASE WHEN g.id = $id THEN 1 ELSE 0 END

存在从另一个表中选择的ID数组。你的意思是一个id值吗?@Jenny你是如何检索这个id的“数组”的?这是另一种选择吗?你能举个例子说明你的数据和你想更新什么吗?@Jenny,听起来你想更新整个成绩表,但将1设置为所选ID的成绩,将0设置为所有其余的成绩。请参阅我的更新解决方案。否,成绩表还有其他行。我刚刚又更新了我的问题。id将被更新——1到1,其他的为零,并保持grade表中的其余行不变。@Jenny:更具体地说,您还可以用
g.id=$id
替换这个答案中的CASE表达式,即
UPDATE。。。设置g.grade=(g.id=$id)
。(括号在这里很可能是可选的,但看起来不那么模棱两可。)