我将根据这些电子邮件的来源,将用户输入内容(电子邮件地址)引入数据库(MySQL)。我有1个电子邮件表用于所有项目,这些项目并不多(大约20个),每个项目都有一个单独的列。有些电子邮件最终将被删除,某些行中的某些字段将被标记为空或空。
大多数情况下,电子邮件将大量发布(可以这么说),因此我必须通过一系列电子邮件循环并为每个值,将该值引入电子邮件所属的任何项目中。到目前为止一直很好,已经完成了。
然而,正如我所说,一些电子邮件将被删除。我想用电子邮件地址替换空字段,如果没有找到空字段,请将电子邮件插入列中。
电子邮件将以批量方式进行,因此我将循环访问数组,并根据空字段继续执行插入或更新语句。
长话短说我有这段代码:
SELECT column_name
FROM table_name
CASE
WHEN column_name='' OR column_name IS NULL
THEN
UPDATE SET column_name='new_value'
WHERE column_name='' OR column_name IS NULL
ELSE INSERT INTO table_name(column_name) VALUES ('new_value')
END
哪个不起作用。我100%肯定我搞砸了某个地方的语法,但MySQL手册并没有多大帮助。有些网页建议使用CASE,有些建议使用IF。
如果有人可以看一下并给我一些指示,我会非常感激。
我正在使用PHP。
如果我的解释中有任何不清楚的地方(我有这样做的习惯),请告诉我。
查看MySQL手册中的IF / ELSEIF:
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
我的新代码和没有改进的代码应如下所示:
SELECT column_name
FROM table_name
IF column_name='' OR column_name IS NULL
THEN UPDATE SET column_name='new_value' WHERE column_name='' OR column_name IS NULL
ELSE INSERT INTO table_name (column_name) VALUES ('new_value)
END IF
这当然不起作用。
答案 0 :(得分:0)
如果column_name是PRIMARY KEY或UNIQUE INDEX,您可以使用INSERT.. ON DUPLICATE KEY UPDATE:
INSERT INTO table_name(column_name) VALUES ('new_value')
ON DUPLICATE KEY UPDATE column_name = 'new_value'
来自文档:
如果指定ON DUPLICATE KEY UPDATE,则插入一行 会导致UNIQUE索引或PRIMARY KEY中的重复值 执行旧行的更新。