Php 如果其他字段的字段值不存在,则插入记录

Php 如果其他字段的字段值不存在,则插入记录,php,mysql,Php,Mysql,我有一张表格可以编辑一个记录样本。表单上有一个多选列表,其中包含来自表主题的记录。此选择列表显示样本主题查找表中标识的样本存在的选定主题以及可从主题表添加到样本的主题 我希望能够将列表中未选择的主题添加到查找表中,其中样本的主题不存在: CREATE TABLE IF NOT EXISTS `specimen_topic_lookup` ( `specimen_topic_lookup_pk` int(6) NOT NULL AUTO_INCREMENT, `specimen_fk` i

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

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

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 ;
你知道我该怎么做吗

更新

我使字段“样本”和“主题”独一无二。使用下面的代码,在样本_表格查找中只创建了一条记录,当在使字段唯一之前应该创建两条记录时,创建了两条记录OK。。。。我假设这是因为$sample_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());
    }
看起来拥有唯一性意味着停止使用相同的值制作记录,这至少是我所期望的

这很有效

不必使样本或主题独一无二

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());

使用INSERT IGNORE语句。这将插入不违反唯一键的任何行,并忽略违反唯一键的行。

在表上创建唯一索引,并使用insert ignore或on duplicate key update:

或者,您也可以在不使用唯一索引的情况下执行以下操作:

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
                     );

如果我将sample_fk或topic_fk设置为唯一,则当这些字段的值已经存在于其他记录中时,我将无法添加记录。唯一性需要在这两者之间匹配fields@PeterBrowne . . . 唯一性取决于两个字段的组合,而不是每个字段。请参见操作中的编辑。使字段唯一只会导致插入一条记录,而不是两条记录…我认为这是因为$sample_pk的值相同…@GordonLinoff…您的替代解决方案很好…非常感谢!!见编辑的作品。
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
                     );