SQL UPDATE使用CASE WHEN,PHP变量作为参数

时间:2015-03-07 23:50:18

标签: php sql case

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

我正在使用一个删除文章的PHP函数(即/ A / An /'等)并创建一个变量($ mat_alph,如果不存在则分配为NULL),以后可以对其进行字母表化。这仅适用于包含文章的标题,但对于没有文章的标题,我希望将其保存在数据库中作为NULL值。

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

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

以下尝试处理没有文章的标题(即Hamlet将mat_alph更新为NULL)但是文章(即白痴)会产生此错误: -

截断错误的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'";

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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

相关问题