SQL 使用 CASE WHEN 以 PHP 变量作为参数进行更新

SQL UPDATE using CASE WHEN with PHP variable as argument

我有一个数据库以各自的格式存储资料,即白痴(小说)、哈姆雷特(戏剧)、星球大战(剧本)等

我正在使用 PHP 函数删除文章(即 The/A/An/' 等)并创建一个变量($mat_alph,如果 [=35] 则分配 NULL =]) 以后可以按字母顺序排列。这仅对包含文章的标题是必需的,但对于那些没有文章的标题,我希望将其作为 NULL 值保存在数据库中。

将变量保存为 NULL 状态会将其存储为空字符串而不是实际的 NULL 值,这会在以后通过 IS NULL/IS NOT NULL 过滤结果时出现问题(我需要在使用带 CASE WHEN 的 SELECT 命令为没有文章的人调用 mat_nm,为有文章的人调用 mat_alph)。我不想为没有文章的标题保存 mat_alph 值,因为这将适用于大量,重复 mat_nm 值并浪费内存。

是否可以在使用 PHP 变量作为参数的 UPDATE 语句中使用 CASE WHEN?

下面的尝试很好地处理了没有文章的标题(即 Hamlet 将 mat_alph 更新为 NULL)但有文章(即 The Idiot)会产生此错误:-

截断了不正确的 DOUBLE 值:'Idiot'

$sql=   "UPDATE mat SET
        mat_nm='$mat_nm',
        mat_alph=CASE WHEN ('$mat_alph') THEN '$mat_alph' END,
        mat_url='$mat_url',
        frmtid=(SELECT frmt_id FROM frmt WHERE frmt_url='$frmt_url')
        WHERE mat_id='$mat_id'";

这可能吗?我是否需要单独的 SQL UPDATE 命令来更新 mat_alph 字段?

该问题也适用于初始 INSERT 命令,我希望解决方案适用于这两个命令。

$sql =  "INSERT INTO mat(mat_nm, mat_alph, mat_url, frmtid)
        SELECT '$mat_nm', '$mat_alph', '$mat_url', frmt_id FROM frmt WHERE frmt_url='$frmt_url'";

提前致谢。

参数需要正确的语法。三个解决方案:-

mat_alph=CASE WHEN NULLIF('$mat_alph','') IS NOT NULL THEN '$mat_alph' END

mat_alph=CASE WHEN '$mat_alph'='' THEN NULL ELSE '$mat_alph' END

mat_alph=CASE WHEN '$mat_alph'!='' THEN '$mat_alph' END

最后一个是第二个的较短版本,因为 NULL 作为不匹配案例的默认值。

归功于 r937