如果另一个字段不存在字段值,则INSERT记录

时间:2014-02-28 02:29:35

标签: php mysql

我有一个表格来编辑记录(标本)。在表单上是一个多选列表,其中包含表(主题)中的记录。此选择列表显示样本中存在的主题(如sample_topic查找表中所示)以及可添加到样本中的主题(来自主题表)。

我希望能够将未在列表中选择的主题添加到查找表中,其中samples_fk尚不存在topic_fk:

CREATE TABLE IF NOT EXISTS `specimen_topic_lookup` (
  `specimen_topic_lookup_pk` int(6) NOT NULL AUTO_INCREMENT,
  `specimen_fk` int(6) NOT NULL,
  `topic_fk` int(3) NOT NULL,
  PRIMARY KEY (`specimen_topic_lookup_pk`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=8 ;

我有什么想法可以做到这一点吗?

更新

我已将字段sample_fk和topic_fk设为UNIQUE。使用下面的代码,在samples_table查找中只创建一条记录,当应该创建两条记录时(在创建字段UNIQUE之前,创建两条记录OK ...)。我认为这是因为$specimen_pk对于每个插入都是相同的值。

foreach($topics as $topic){
    $query_topics = "INSERT IGNORE INTO specimen_topic_lookup(specimen_fk, topic_fk)
    VALUES ('$specimen_pk', '$topic')";
$result_topics = mysql_query($query_topics, $connection) or die(mysql_error());
    }

看起来UNIQUE正在停止使用相同的值创建记录(这至少是我的预期......)

这项工作

无需制作samples_fk或topic_fk UNIQUE ......

foreach($topics as $topic){
    $query_topics = "INSERT INTO specimen_topic_lookup(specimen_fk, topic_fk)
    SELECT '$specimen_pk', '$topic'
    FROM DUAL
    WHERE NOT EXISTS (SELECT 1
                      FROM specimen_topic_lookup
                      WHERE specimen_fk = '$specimen_pk' AND topic_fk = '$topic')";
$result_topics = mysql_query($query_topics, $connection) or die(mysql_error());

2 个答案:

答案 0 :(得分:2)

在表格上创建一个唯一索引并使用insert ignoreon duplicate key update

create unique index specimen_topic_lookup(specimen_fk, topic_fk);

insert ignore into specimen_topic_lookup(specimen_fk, topic_fk)
    select $speciment_fk, $topic_fk;

或者,您可以在没有唯一索引的情况下执行以下操作:

insert into specimen_topic_lookup(specifmen_fk, topic_fk)
    select $speciment_fk, $topic_fk
    from dual
    where not exists (select 1
                      from specimen_topic_lookup
                      where specimen_fk = $specimen_fk and topic_fk = $topic_fk
                     );

答案 1 :(得分:0)

使用INSERT IGNORE声明。这将插入任何不违反唯一键的行,并忽略那些行。