php - 在 MySQL 和 PHP 的更新语句中使用 COALESCE 接受 "Null"值

标签 php mysql coalesce

我有多个<forms>每个都有 1 个表单元素(例如文本框)。但所有这些元素的值都在一个 MySQL 表中。可以通过单独提交相应的表单来单独修改(即插入/更新/删除)这些元素。请参阅this fiddle 来了解 html 结构的基本概念。

HTML

<form class="form-horizontal" id="form1" method="post">
<div class="form-group">
    <label class="col-xs-3 control-label">Form 1</label>
    <div class="col-xs-10">
        <input class="form-control" type="text" name="element1" maxlength="50" />
        <br>
        <button type="button" class="btn btn-default btn-xs">Cancel</button>
        <button type="submit" class="btn btn-primary btn-xs">Save Changes</button>
    </div>
</div>
</form>


<form class="form-horizontal" id="form2" method="post">
<div class="form-group">
    <label class="col-xs-3 control-label">Form 2</label>
    <div class="col-xs-9">
        <input class="form-control" type="text" name="element2" maxlength="50" />
        <br>
        <button type="button" class="btn btn-default btn-xs">Cancel</button>
        <button type="submit" class="btn btn-primary btn-xs">Save Changes</button>
    </div>
</div>
</form>

PHP

if(isset($_POST['element1'])){
        if(empty($_POST['element1'])){
            $element1= ''; //Update empty value if $_POST is empty
        }
    else{
        $element1= $_POST['element1']; 
    }
    }
    else{
      $element1= null;  
    }

    if(isset($_POST['element2'])){
        if(empty($_POST['element2'])){
            $element2= ''; //Update empty value if $_POST is empty
        }
    else{
        $element2= $_POST['element2']; 
    }
    }
    else{
      $element2= null;  
    }

    $sql_update = "UPDATE element_table SET element1=COALESCE(NULLIF('" . mysql_real_escape_string($element1) . "',''), element1), element2=COALESCE(NULLIF('" . mysql_real_escape_string($element2) . "',''),element2) WHERE id=01";          

MySQL 表

________________________________________________________________________________
|   id   |   element1   |   element2   |   element3   |   element4   |   ...   |
________________________________________________________________________________
|   01   |       1      |       2      |       3      |       4      |   ...   |

要求

  1. 当我提交表单 1 时,未设置 $_POST['element2'],因此我不想更改 element2。更新查询仅修改 element1。
  2. 当我提交 #form1 时,

    a.如果 $_POST['element1'] 不为空,则更新 POST 变量中的值。

    b.如果 $_POST['element1'] 为空,则将 null 值更新为 db。即将该列留空。

问题

第 1 点和第 2.a 点。工作正常,但是我无法完成第 2.b 点。也许我以错误的方式使用 COALESCE 。有人可以告诉我如何在仍然使用 COALESCE 的同时将空值更新到数据库吗?谢谢

附注由于某些原因,数据库设计无法更改,我无法在此透露。

最佳答案

在子查询中,添加UNION SELECT 'default' LIMIT 1:

UPDATE `table` SET `f1`=(
  SELECT `f2` FROM `table2` WHERE `f3` = 'value'
  UNION SELECT 0
  LIMIT 1
);

这就是我刚刚解决类似问题的方法。

关于php - 在 MySQL 和 PHP 的更新语句中使用 COALESCE 接受 "Null"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29713816/

相关文章:

javascript - 如何在fabric.all.min.js中调用弯曲文本中的字体系列

php - 安装期间找不到 MediaWiki 的数据库驱动程序

mysql - 在将某些内容插入到外键引用的子表之前查找主键的值

mysql - 将主键从 id 切换为数据透视表中的值组合

python - Python Pandas 的合并 (SQL) 功能

django - 合并必须至少采用两个表达式

php - Laravel 5.1 无法迁移数据库

php - 将 Web 应用程序 (ZF2) 转换为 PHAR

php - php codeigniter中的电话号码验证

twig - Twig是否有空合并运算符?