Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einfügen, wo nicht vorhanden – ohne Primärschlüssel

Wenn Sie wirklich Ihre eigene (funktionierende) Abfrage schreiben wollen...

INSERT INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) SELECT 
    '$_POST[id]'  f_dent_id, 
    '$groupid'    f_group_id,
    '$scheduleid' f_schedule_id
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1
  FROM `groupdentlink`
  WHERE 
    f_dent_id = '$_POST[id]' AND f_group_id = '$groupid'
  LIMIT 1 -- will stop mysql to stop searching after first match
)

... aber MySQL kann das alles für Sie erledigen!

Sie benötigen keine Primärschlüssel, damit MySQL dies für Sie erledigt, Sie sollten einen UNIQUE hinzufügen Schlüsseleinschränkung für den kombinierten Satz der beiden Spalten.

Abfrage zum Hinzufügen des eindeutigen Schlüssels dent_group_uniq_key zu groupdentlink .

ALTER TABLE groupdentlink ADD UNIQUE KEY `dent_group_uniq_key` (
  f_dent_id, f_group_id
);

Verwenden Sie dann INSERT IGNORE zu Ihrer Anfrage:

INSERT IGNORE INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) VALUES (
  '$_POST[id]', '$groupid', '$scheduleid'
)

INSERT IGNORE wird versuchen, eine Zeile in Ihre Tabelle einzufügen, wenn dies aufgrund einer Schlüsselbeschränkung fehlschlägt, wird es so tun, als ob nichts passieren würde.