gpt4 book ai didi

php - mysql 收缩 where 子句

转载 作者:行者123 更新时间:2023-11-29 04:40:24 29 4
gpt4 key购买 nike

我有一个10列24行的表,可以存储一个值,也可以是=0。它们被称为msg1,msg2...直到msg10。我正在编写一个查询,用 0 而不是任何字段中的特定值来更新此表。

所以我写了(59是一个测试值,会被php动态更新):

UPDATE schedule SET msg1='0' WHERE msg1='59' OR SET msg2='0' WHERE msg2='59'....
OR SET msg10='0' WHERE msg10='59'

这显然是行不通的,无论如何这将是我见过的效率较低的查询之一。所以问题是:遍历所有行和列、查找特定值(即 59)并将其更改为 0 的巧妙方法是什么?

我知道我可以使用 for 循环来做到这一点,但这最终会导致每次 24 次查询...效率也不高!

最佳答案

您将不得不引用每一列。我只是对表格进行全面扫描,然后更新每一行。索引无济于事,不需要 WHERE 子句。假设这些列是字符,请在值周围使用单引号。如果这些是数字,您可以省略单引号。

UPDATE schedule
SET msg1 = IF(msg1='59','0',msg1)
, msg2 = IF(msg2='59','0',msg2)
, msg3 = IF(msg3='59','0',msg3)
, ...

如果你想添加一个 WHERE 子句(这不是真正需要的),你可以在 SET 子句之后添加它......

WHERE msg1='59'
OR msg2='59'
OR msg3='59'

我很想写这个语句,所以我只需要指定一次值 '59''0',如下所示:

UPDATE schedule s
CROSS
JOIN (SELECT '59' AS oldval, '0' AS newval) v
SET s.msg1 = IF(s.msg1=v.oldval,v.newval,s.msg1)
, s.msg2 = IF(s.msg2=v.oldval,v.newval,s.msg2)
, s.msg3 = IF(s.msg3=v.oldval,v.newval,s.msg3)

关于php - mysql 收缩 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354398/

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