ON DUPLICATE KEY UPDATE (problème de clée unique)

Eléphanteau du PHP | 15 Messages

03 juin 2009, 11:28

Bonjour,

Le titre n'étant pas très parlant je vais essayer d'expliquer clairement mon pb .

J'ai une table avec deux champs id_candidat et type .
J'enregistre pour chaque candidat plusieurs types ...

J'aimerais avoir la possibilité lors de mon enregistrement que si un type est déjà enregistré je fasse un UPDATE. J'ai pensé à mettre mon champs type en clé unique et utiliser une requête

Code : Tout sélectionner

INSERT INTO Table( id_candidat, type) VALUES( '$id_candidat', '1') ON DUPLICATE KEY UPDATE id_candidat ='$id_candidat',type='1'";
or dans ma table je peux avoir plusieurs types de même valeur pour différents candidats .Vous me suivez ?

Donc je voudrais savoir comment faire pour ne pas à avoir faire plusieurs requêtes pour vérifier si un enregistrement existe déjà puis faire un UPDATE.

ViPHP
AB
ViPHP | 5818 Messages

03 juin 2009, 12:06

Tu crée une clef unique ou primaire composée des deux champs id_candidat et type, et le tour est joué.
Par contre l'utilisation de ON DUPLICATE KEY UPDATE recommande de n'avoir qu'une clé unique ou primaire pour la table. Il faudrait supprimer les autres clés de ce type si tu en as d'autres.

Eléphanteau du PHP | 15 Messages

03 juin 2009, 13:29

J'ai bien pensait au champs unique que tu propose mais le problème ce que mon champs type prend des valeurs de 1 à 13 donc cela ne peut pas marcher :

type 11 candidat 1 : champs unique : 111
type 1 candidat : 11 champs unique : 111

:(

ViPHP
AB
ViPHP | 5818 Messages

03 juin 2009, 13:55

Ah bah je t'ai pas dit de créer un nouveau champ, je t'ai dit de créer une clé composée des deux champs, c'est à dire par exemple :

Code : Tout sélectionner

CREATE TABLE `test_enibib` ( `candidat` int(11) NOT NULL, `type` tinyint(4) NOT NULL, PRIMARY KEY (`candidat`,`type`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Contenu de la table `test_enibib` -- INSERT INTO `test_enibib` (`candidat`, `type`) VALUES (1, 11), (11, 1);

Eléphanteau du PHP | 15 Messages

03 juin 2009, 14:04

Je ne savais pas qu'on pouvait mettre deux champs en clé primaire merci du conseil ... c'est ce que je chercher à faire en pensant que cela n'était pas possible.

PS : j'ai une autre clé primaire appelé 'id' et en auto increment ... Ça va poser problème ?
Sinon je peux la passer en clé unique .

ViPHP
AB
ViPHP | 5818 Messages

03 juin 2009, 14:52

Je ne savais pas qu'on pouvait mettre deux champs en clé primaire merci du conseil ... c'est ce que je chercher à faire en pensant que cela n'était pas possible.

PS : j'ai une autre clé primaire appelé 'id' et en auto increment ... Ça va poser problème ?
Sinon je peux la passer en clé unique .
Ben normalement il ne va plus te servir à rien cet 'id'. Tu en vois l'utilité ?

Eléphanteau du PHP | 15 Messages

03 juin 2009, 17:08

Si je m'en sert quand même pour mettre en relation une autre table .
Mais en clé unique ça me vas très bien ^^