簡體   English   中英

如果另一個字段不存在字段值,則INSERT記錄

[英]INSERT record if field value doesn't exist for another field

我有一個表格來編輯記錄(標本)。 在表單上是一個多選列表,其中包含表(主題)中的記錄。 此選擇列表顯示樣本中存在的主題(如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 ;

我有什么想法可以做到這一點?

UPDATE

我已將字段samples_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());

在表上創建唯一索引並使用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
                     );

使用INSERT IGNORE語句。 這將插入任何不違反唯一鍵的行,並忽略那些行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM