replace into et 2 clés uniques

WRInaute occasionnel
Bonjour,

J'ai une table 'clients' avec 2 clés 'unique': id_client (int autoincrement) et codecomptable_client (CHAR 6)
Lorsque je fais un import depuis une application tierce, j'ai une requête
Code :
Sélectionner tout - Visualiser dans une fenêtre à part
Code:
REPLACE INTO clients (codecomptable_client, ...

Le but est que si l'application tierce m'envoie un client avec le même code client, je fait un mise à jour et non un ajout.
Problème: la mise à jour modifie également le id_client. Or il ne le faut pas (c'est le lien avec plein d'autres tables).

Comment dois-je m'y prendre ?
 
WRInaute occasionnel
En fait, je vais tenter avec
Code:
INSERT INTO ... ON DUPLICATE KEY UPDATE ...
Mais dans ce cas, je n'ai pas mis la clé id_client en 'unique' mais en 'index'. Seule l'autre clé codecomptable_client reste en 'unique'.

Qu'en pensez-vous ?
 
WRInaute passionné
A mon avis, surement pas INSERT. Plutot UPDATE comme indiqué par tryan.
Mais qu'est ce que tu veux faire, réellement? Mettre à jour codecomptable_client?
 
WRInaute occasionnel
surtout pas: je veux qu'il y ait insertion, sauf si codecomptable_client est déjà connu dans la base, alors on fait un update.
 
WRInaute accro
Dans ce cas là je ferais un if en php (je connais pas assez en sql) : if (select codecomptable_client from table = lecodecherché) UPDATE else INSERT
 
WRInaute occasionnel
Salut bproductiv ;-)

Ta solution vient effectivement à l'esprît, mais demande 2 requêtes SQL. Sachant que l'import peut comporter des milliers de ligne, j'évite.
 
WRInaute accro
Oui c'est clair, tout dépend la bécane derrière, avec openedge (concurrent d'oracle) je le fais sans soucis avec des milliers de lignes et ca bronche pas :)
 
WRInaute occasionnel
J'ai résolu mon affaire avec
Code:
INSERT INTO ... ON DUPLICATE KEY UPDATE...
J'ai donc une seul clé de type 'unique'. La clé id_client qui est auto_increment est en 'index'.
Merci à vous. Tshaw (comme dirait Edika) !
 
Discussions similaires
Haut