MySQL pour ajout d'une table on duplicate key

WRInaute occasionnel
Bonjour, je voudrais insérer dans une table b le contenu entier d'une table a, mais si un enregistrement existe déjà, seulement mettre à jour l'enregistrement.

champ1unique : est une valuer qui doit être unique
champ2valeur : est une valeur à ajouter (ou updater si champ1unique existe déjà)

Insert Into table_b (champ1unique, champ2valeur) Select (champ1unique,champ2valuer) From table_a

visiblement dans le mode d'emploi MySQL le ON DUPLICATE KEY UPDATE n'existe pas lorsque on fait un Insert avec un Select.

Alors peut-être une requête sur la table_a
Select (champ1unique,champ2valeur) From table_a
while($val = mysql_fetch_array($req))
{
$x=$val['champ1unique'];
$y=$val['champ2valeur'];
INSERT INTO table_b (champ1unique, champ2valeur) VALUES ($x,$y) ON DUPLICATE KEY UPDATE champ2valeur=$y
}

est-ce que c'est comme ça qu'on fait ou est-ce qu'il y a une autre méthode?
 
WRInaute accro
>> est-ce que c'est comme ça qu'on fait ou est-ce qu'il y a une autre méthode?

Ouiiii pour une autre méthode !

> utilise UNIQUE KEY et ton probleme sera vite résolu :wink:

Code:
CREATE TABLE login (
  login_id int(20) NOT NULL auto_increment,
  champ1unique varchar(30) NOT NULL default '',
  PRIMARY KEY  (login_id),
  UNIQUE KEY champ1unique (champ1unique)
);
 
WRInaute occasionnel
???

Cela veut dire que si je créé ma table comme ça je peux utiliser le code que j'ai mis ou? ou alors c'est juste une piste et le code c'est pas du tout ça? :?:
 
WRInaute accro
reprenons,

A quoi sert UNIQUE KEY ? A ne pas pouvoir inserer de doublons dans la table. Donc pour toi tu vas dans ta "table_b", et tu passe ton champ champ1unique en UNIQUE KEY champ1unique (champ1unique) (voir exemple + haut)

tu peux maintenant passer les datas de la "table_a" a la table "table_b" sans te preocupe d'enlever les doublons (les duplicate). Ca se fera tout seul puisqu'ils ne pourrons pas s'inserer.
 
WRInaute occasionnel
ok c'est cool...ça répond partiellement à mon problème!

mais le but c'était :

si l'enregistrement champunique n'existe pas on l'ajoute
mais si l'enregistrement champunique existe on ne l'ajoute pas MAIS on update champvaleur...
 
Discussions similaires
Haut