循环通过数组并根据列中的空值插入或更新列 - MySQL

时间:2013-11-20 12:25:30

标签: php mysql sql arrays email

我将根据这些电子邮件的来源,将用户输入内容(电子邮件地址)引入数据库(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

这当然不起作用。

1 个答案:

答案 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中的重复值   执行旧行的更新。