Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insérer là où il n'existe pas - sans clé primaire

Si vous voulez vraiment écrire votre propre requête (de travail)..

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
)

... mais MySQL peut gérer tout cela pour vous !

Vous n'avez pas besoin de clés primaires pour que MySQL gère cela pour vous, vous devez ajouter un UNIQUE contrainte de clé sur l'ensemble combiné des deux colonnes.

Requête pour ajouter la clé unique dent_group_uniq_key vers groupdentlink .

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

Ensuite, utilisez INSERT IGNORE sur votre requête :

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

INSERT IGNORE essaiera d'insérer une ligne dans votre tableau, s'il échoue en raison d'une contrainte de clé, il agira comme si de rien n'était.