replace into et 2 clés uniques


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 393
Inscription: 29 Déc 2004

replace into et 2 clés uniques

Message le Lun Aoû 01, 2011 10:17

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: Tout sélectionner
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 ?


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: replace into et 2 clés uniques

Message le Lun Aoû 01, 2011 11:25

Salut,

ça ne serait pas un UPDATE au lieu de REPLACE qu'il faut faire ?


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 393
Inscription: 29 Déc 2004

Re: replace into et 2 clés uniques

Message le Lun Aoû 01, 2011 15:05

En fait, je vais tenter avec
Code: Tout sélectionner
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 ?


MikeR
WRInaute impliqué
WRInaute impliqué
 
Messages: 587
Inscription: 9 Jan 2010

Re: replace into et 2 clés uniques

Message le Lun Aoû 01, 2011 17:11

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?


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 393
Inscription: 29 Déc 2004

Re: replace into et 2 clés uniques

Message le Lun Aoû 01, 2011 17:22

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.


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 4173
Inscription: 27 Déc 2004

Re: replace into et 2 clés uniques

Message le Mar Aoû 02, 2011 6:44

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


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 393
Inscription: 29 Déc 2004

Re: replace into et 2 clés uniques

Message le Mar Aoû 02, 2011 8:56

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.


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 4173
Inscription: 27 Déc 2004

Re: replace into et 2 clés uniques

Message le Mar Aoû 02, 2011 9:16

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 :)


xdeslandes
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 393
Inscription: 29 Déc 2004

Re: replace into et 2 clés uniques

Message le Mar Aoû 02, 2011 17:47

J'ai résolu mon affaire avec
Code: Tout sélectionner
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) !


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité