如何使用 mysql 中多个 if 语句的输出更新列文本值?

How to update column text value with the output of multiple if statement in mysql?

例如,我的 table 结构就像 -

id (int, auto_increment),
value_1_isChecked (int),
value_1 (text),
value_2_isChecked (int),
value_2 (text),
value_3_isChecked (int),
value_3 (text),
extra_info (text),
interpretation (text)

所有值(value_1value_2value_3)、它们的检查状态(以 0 或 1 的形式)、数据库中存在额外信息(30k 行) ). 我正在尝试的是更新 interpretation 单元格中的串联文本(我知道这不是正确的 mySql 格式,我只是在写为了更好地理解我的问题)-

variable result='<b>Selected Values :-</b><br>';
If(value_1_isChecked = 1) Then
result = result + "<b>[A]. </b>" + value_1 + "<br>";
End If;
If(value_2_isChecked = 1) Then
result = result + "<b>[B]. </b>" + value_2 + "<br>";
End If;
If(value_3_isChecked = 1) Then
result = result + "<b>[C]. </b>" + value_3 + "<br>";
End If;
If(extra_info Is NOT NULL) Then
result = result + "<br><b>Extra info :-</b><br>" + extra_info;
End If;
Update myTable set interpretation = result;

我无法使用 ELSEIF,因为多个值的检查状态可能为真 (1)。

我知道,如何在 PHP 中实现这一点,但是更新数千(约 30K)行需要很长时间,这就是为什么我试图从 mySql 本身。但是我无法形成正确的查询。

希望这个例子对你有帮助

SQL FIDDLE DEMO

select 
     concat (
           case v1 when '1' then concat('<b>','v1','</b>') else '' end,
           case v2 when '1' then concat('<b>','v2','</b>') else '' end,
           case v3 when '1' then concat('<b>','v3','</b>') else '' end
       )
from table1

只需更新查询以满足您的需要,然后重写为 UPDATE

您可以像这样使用 case 语句:

UPDATE myTable
SET interpretation = CASE WHEN value_1_isChecked = 1 THEN concat('<b>','value_1','</b>')
                          WHEN value_2_isChecked = 1 THEN concat('<b>','value_2','</b>')
                          WHEN value_2_isChecked = 1 THEN concat('<b>','value_3','</b>')
                          WHEN extra_info Is NOT NULL THEN concat('<b>','extra_info','</b>')
                          ELSE ''
END;