8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je fais face à un problème tout c*n (j'en suis certaine), mais que j'arrive pas à résoudre :

J'ai une table toute simple (appelons-là "table") qui contient 3 champs :
- id
- envoi
- réception.

Ce sont tous les 3 des int, id est un identifiant chiffré commun à moults tables et la primary key ici.

Je cherche à updater la table, soit avec un insert; soit avec un update si la clé existe. Jusque là je sais faire. A part que j'ai à faire avec des valeurs différentes sur mes "values".

La requête sans "on duplicate key" ressemble à ça (les $... sont des variables issues du php):
insert into `table` (`id`, `envoi`, `reception`) values ($id1,$e,$r),($id2,$r,$e)


A l'heure actuelle, j'ai une solution qui marche, mais avec 2 requêtes...
insert into `table` (`id`, `envoi`, `reception`) values ($id1,$e,$r) on duplicate key update `envoi`=`envoi`+$e, `reception`=`reception`+$r

insert into `table` (`id`, `envoi`, `reception`) values ($id2,$r,$e) on duplicate key update  `envoi`=`envoi`+$r, `reception`=`reception`+$e



Mais j'aimerais savoir si y a moyen de grouper en 1 seule requête ^^
Modifié par Lothindil (06 Oct 2011 - 15:38)
Salut,

La doc MySQL me dit :

Doc MySQL a écrit :
You can use the VALUES(col_name) function in the UPDATE clause to refer to column values from the INSERT portion of the INSERT ... UPDATE statement.


Doc MySQL a écrit :
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);