gpt4 book ai didi

mysql - MYSQL CASE 表达式可以在相同的 WHEN 条件下运行良好吗?

转载 作者:行者123 更新时间:2023-11-29 12:19:44 26 4
gpt4 key购买 nike

如您所见:

UPDATE activity
SET number = CASE
WHEN aid = 45 THEN
number + 1
WHEN aid = 43 THEN
number + 1
END
WHERE
aid IN (45, 43)

此查询运行良好。但是:

UPDATE activity
SET number = CASE
WHEN aid = 45 THEN
number + 1
WHEN aid = 43 THEN
number + 1
WHEN aid = 45 THEN
number + 3
WHEN aid = 49 THEN
number + 1
END
WHERE
aid IN (45, 43,49)

查询有问题。第二个“WHEN aid=45...”不起作用。结果是当aid=45时数字增加1,但我希望数字增加4。

感谢您的回答。但我认为我的问题描述得很简单。所以,也许我应该详细描述一下。我的 PHP 代码用于更新不同事件的数量。辅助是主键。

/*
$aids is an array which the key is the activity's primary key and the
value is the activity's number.
example $aids = array('45'=>4,'43'=>1...)
In the array,i combine all the same aid to one element.so one aid can
not be used twice by the case expression.And all the number are total
number.
*/
$sql = 'update huodong_activity set applynumber = case ';
$aids_str = implode(',',array_keys($aids));
foreach($aids as $k=>$v){
$sql .= sprintf(' when aid = %d then applynumber-%d',$k,$v);
}
$sql .= ' END WHERE aid IN ('.$aids_str.') ';
$db->query($sql);

我的问题是:

1.我真的不知道为什么 case 表达式在“aid=45”使用两次或更多次时不起作用?

2.我不知道“更新案例表达式”或任何限制可以更新多少行?

最佳答案

第二个版本将不起作用,因为 case 表达式将匹配前 45 个,然后停止。如果您想将其增加 4,只需删除 WHEN acid = 45 THEN number + 1 并将第二个更改为 WHEN aid = 45 THEN number + 4,如下所示:

UPDATE activity
SET number = CASE
WHEN aid IN (43, 49) THEN
number + 1
WHEN aid = 45 THEN
number + 4
END
WHERE
aid IN (45, 43, 49)

关于mysql - MYSQL CASE 表达式可以在相同的 WHEN 条件下运行良好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29205842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com