不要在Mysql中添加完全相同的3列值

时间:2016-12-19 14:27:19

标签: php mysql codeigniter

我需要在数据库中添加CSV文件。但是在我添加一个文件后,几周后我需要添加一个新的文件更新。问题是:添加了重复的行。

我没有行的ID,因此我必须查看它们是否与“城市”,“地址”和“位置名称”相同。只有当3匹配时,我们才将新行放在数据库中。

我尝试了IGNORE,但它似乎只能将ID作为主键(我没有主键)。

我还读了一个'多主键'线程,但我没有成功创建它。

我的实际代码是(Codeigniter):

$query = $this->db->query('
            LOAD DATA INFILE "'.$path.'fichier/'.$fichier.'"  
            INTO TABLE location FIELDS TERMINATED BY ";" 
            LINES TERMINATED BY "'.$os2.'" 
            IGNORE 1 LINES ('.$name[1].','.$name[2].','.$name[3].','.$name[4].','.$name[5].','.$name[6].','.$name[7].','.$name[8].','.$name[9].','.$name[10].','.$name[11].','.$name[12].','.$name[13].','.$name[14].','.$name[15].','.$name[16].','.$name[17].','.$name[18].','.$name[19].')');

2 个答案:

答案 0 :(得分:0)

我想说,最好是在临时表中加载更新后的CSV。加载完所有数据后,使用实际表格执行LEFT JOIN并查找所有新记录,然后仅将这些新记录插入主表(OR)加载所有数据后,刷新主表中的所有数据这个新的临时表。

根据你的评论:

是的,您已将数据加载到新表中,并使用主表执行LEFT JOIN(如下所示)

select staging_table.id
from staging_table
left join main_table on staging_table.id = main_table.id
where main_table.id is null;

答案 1 :(得分:0)

如果有人想知道我最终如何成功:

我在phpmyadmin中创建了一个唯一的。然后我根据我的要求使用了IGNORE

ALTER TABLE location
   ADD CONSTRAINT iu_location UNIQUE( col1, col2, col3 );