2017-08-11 4 views
0

J'ai une table contenant des données de questions. Chaque question comporte également un identifiant de test, un identifiant de document (dokuman_id), un ordre (sira) et des données vidéo. Je veux créer une requête qui insère une nouvelle ligne s'il n'y a pas de ligne a le même identifiant de test, l'identifiant du document et l'ordre; Sinon, mettez à jour le champ vidéo.Utilisation de "sur une clé en double" avec plusieurs conditions de duplication

enter image description here

Je sais que je pourrais utiliser sur clé DUPLICATE si je veux le faire avec la colonne ID (primart_key). Mais j'ai besoin de contrôler 3 conditions de colonnes en double aussi optimales que possible.

+4

donc créer un index unique combiné sur trois colonnes ...? – CBroe

Répondre

1

vous devez créer un index sur test_id , dokuman_id , sira

INSERT INTO table (test_id , dokuman_id , sira , video) 
VALUES(:test_id , :dokuman_id , :sira , :video) 
ON DUPLICATE KEY UPDATE video = :video 
+0

Dois-je supprimer la clé primaire avant cela? – nskmr

+0

non vous ne devez pas supprimer la clé primaire, vous venez de créer un autre index – Ali

+0

Ok merci mon pote. Mais je ne comprends pas comment db décide clé pour ** sur la clé en double **. Il peut y avoir plusieurs clés – nskmr