Page 1 sur 1

Importation depuis XML

Posté : 25 janv. 2021, 05:36
par Droopy_be
Bonjour,

J'ai une routine qui me retourne dans une variable ($tmp) des données au format XML (voir exemples ci-dessous). Fonction que l'article est décliné en différentes tailles (BURP_B2.XML) ou que l'article n'a qu'une seule taille (SXU.XML), la structure des données retournées n'est pas tout à fait identique mais, dans tous les cas, les données que je dois enregistrer sont toujours identiques:
- GTIN (code unique, clef principale)
- French
- SalesPrice

Je suis débutant en PHP et je ne sais pas comment faire cela. Quelqu'un aurait-il la gentillesse de m'aider?

Bien entendu, il ne suffit pas d'ajouter bêtement des enregistrements à la Table, il vaut vérifier si le GTIN existe, si oui, modifier les autres champs et s'il n'existe pas, il faudra le créer.

https://drive.google.com/file/d/1LdYLOE ... sp=sharing
https://drive.google.com/file/d/1Mzkp5p ... sp=sharing

Merci d'avance pour vos réponses,

Stephan

Re: Importation depuis XML

Posté : 26 janv. 2021, 12:31
par Ryle
Salutations !

Il y a plusieurs façon de faire cela et tout dépend du volume de données que tu as en base et à traiter. Si tu traites peu de données à chaque fois, tu peux faire un SELECT COUNT(*) en base pour vérifier si l'enregistrement existe déjà ou non. Si la requête retourne 0, c'est qu'il n'existe pas et tu peux donc réaliser l'insertion, et si elle retourne 1 (ou plus mais il ne devrait à priori pas :)), c'est qu'il existe déjà et dans ce cas, c'est une mise à jour qu'il faut effectuer. Ce select et un simple if/elfe devrait donc te permettre de faire ce que tu souhaites ;)

Idéalement tu préparerais deux requêtes (un insert et un update) et dans le if, tu exécutes celle dont tu as besoin en lui passant les paramètre de l'enregistrement à créer ou à mettre à jour.

L'inconvénient de vérifier l'existence en base à chaque enregistrement, c'est que tu vas faire un select pour chaque enregistrement de ton flux XML. S'il y en a peu à la fois, ça va, si tu en traites par milliers, ça peut faire beaucoup de requêtes envoyées à la base et c'est pas forcément terrible en terme de performance... à voir donc s'il ne faut pas optimiser ce contrôle d'existence en fonction de ton contexte :)