Requete insert ou update une table

Eléphant du PHP | 428 Messages

10 avr. 2017, 10:06

Bonjour à tous,


Je récupère à travers autre base SQL des enregistrements de la table client. (je demande les fiche clients qui on été créé et modifier entre une date).

Comment faire au niveau mysql (si c'est possible) pour mettre à jour ma table client présent dans mon mysql en une seul requete?

Exemple: Si ce code client existe alors on mets à jour les champs sinon une insert le client.


Est-ce que c'est réalisable ce type de requête ?

merci d'avance pour vos retours

guigui69

Eléphant du PHP | 428 Messages

10 avr. 2017, 10:57

Bonjour,

je pense avoir trouvé la fonction cela s'appel "DUPLICATE KEY UPDATE" au niveau mysql

Par contre je bloque sur la mise en forme.
id_bdc_client
id_client_ICARDMS
code_client_ICARDMS
civilite varchar(32)
prenom varchar(32)
nom varchar(32)
code_postal int(11)
adresse varchar(64)
adresse_suite varchar(64)
ville varchar(64)
tel_pro varchar(12)
tel_per varchar(12)
tel_mob varchar(12)
mail_perso varchar(64)
mail_pro varchar(64)
date_creation date
date_modif date
id_bdc_client => id de ma table qui s’incrémente tout seul.

id_client_ICARDMS code_client_ICARDMS ==> les 2 champs que je recupere de la base SQL serveur.

Je bloque pour mettre en forme la requête pour lui dire tu insert les valeurs seulement
id_client_ICARDMS,code_client_ICARDMS n'existe pas sinon tu réalise un UPDATE de champs.

Si quelqu’un pourrais m'aiguiller je suis preneur

guigui69

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

10 avr. 2017, 12:36

salut,

on duplicate key (tout comme replace) utilise la clef primaire (ou un champs unique) pour savoir s'il doit ou non faire la mise à jour.

soit tu boucle sur ta liste
- récupère la ligne correspondant à la clef primaire ou aux champs que tu récupères pour identifier ta ligne de manière unique
-- si la ligne existe => update
-- sinon insert

c'est assez simple a faire et ce prête très bien aux requêtes préparées.
tu peux le faire en SQL, il te faut définir un format claire pour ton tableau de données et utiliser une procédure stockée qui fera ce que j'ai mis au dessus mais directement en base (idem utilise des requêtes préparées pour insert et update).

https://openclassrooms.com/courses/admi ... s-stockees
si tu passes du json il semble que mysql 5.7 intègre un chose en natif, point de départ : http://dasini.net/blog/2015/11/17/30-mi ... -en-mysql/

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 428 Messages

10 avr. 2017, 12:55

Bonjour Moogli,

si je comprend il faudrait que j'utilise le code_client_ICARDMS comme "UNIQUE" pour mettre ca en place ?

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

10 avr. 2017, 13:39

oui si c'est la seule colonne qui compte ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 428 Messages

11 mai 2017, 17:20

Bonjour Moogli,

j'avance sur ma page, pour une autre table j'ai utilisé la fonction UNIQUE pour teste le numero serie unique un produit. Par contre dans le cas d'un UPDATE je cherche à récuperer son ID comment je pourrais faire car

Code : Tout sélectionner

$id_bdc_vehicule=mysql_insert_id();
me renvoi 0 à chaque fois pour les UPDATE (par contre pour les Insert j'ai bien une valeur

Comment faire pour recuperer cette ID dans le cas d'un update.

merci d'avance pour tes conseils

guigui69