Mysql
 sql >> Database >  >> RDS >> Mysql

Inserisci dove non esiste, senza chiave primaria

Se vuoi davvero scrivere la tua query (funzionante)..

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
)

... ma MySQL può gestire tutto questo per te!

Non hai bisogno di chiavi primarie per fare in modo che MySQL gestisca questo per te, dovresti aggiungere un UNIQUE vincolo chiave sull'insieme combinato delle due colonne.

Query per aggiungere la chiave univoca dent_group_uniq_key a groupdentlink .

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

Quindi usa INSERT IGNORE sulla tua richiesta:

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

INSERT IGNORE cercherà di inserire una riga nella tabella, se fallisce a causa di un vincolo chiave si comporterà come se nulla fosse.