我有一个数据库,以各自的格式存储资料,例如,《白痴》(小说),《哈姆雷特》(游戏),《星球大战》(剧本)等。
我正在使用一个PHP函数,该函数删除了文章(即The / 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值:“白痴”
$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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句