Bonjour,

Je poste ce message car je viens de découvrir la fonction MERGE en Sql qui pourrait m'être utile par contre j'avoue ne pas trop comprendre à 100% comment elle fonctionne.

Pour l'explication :
Je fais des insertions de masse dans une base de données (des produits) quotidiennement extrait de fichier XML. Ces données doivent soit être mises à jour si elles ne sont pas présentes dans la base, soit être insérées si celles-ci sont déjà présentes dans la base. Les produits possèdent un identifiant unique en autoincrement.

Mon code actuel n'est franchement pas optimisé et je cherche à l'améliorer au mieux pour consommer moins de mémoire et donc augmenter la vitesse de traitement.

Code actuel :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php
$select = mysql_query("SELECT element FROM table WHERE element='$numero_produit'");
 
$total = mysql_num_rows($select); // Cette opération peut être répétée 25 000 fois
 
if($total==1)
{
// Je procède à la mise à jour via update
}
else
{
// Sinon je procède à l'insertion avec un insert
}
?>


Le but souhaité avec Merge :
- Supprimer l'étape mysql_num_rows
- Gagner en temps et en mémoire.


Ce que j'ai compris de cette instruction :
Si la donnée a été trouvée dans la base grâce à son identifiant unique
WHEN MATCHED -> UPDATE

Sinon elle n'existe pas alors on l'insère
WHEN NOT MATCHED -> INSERT

Je comprend cette partie de l’instruction mais pas la première. Comment je pourrai mettre en place cette instruction ? C'est finalement la même que la première en PHP ci-dessus mais je pense gagner de la mémoire car au lieu d'avoir 3 instructions avec un appel php de mysql_num_rows j'en ai qu'une..

MERGE INTO produit USING (SELECT numero_produit FROM produit WHERE numero_produit='$numero_produit' )
WHEN MATCHED THEN UPDATE produit SET info1='$info1',info2='$info2' WHERE numero_produit='$numero_produit'
WHEN NOT MATCHED THEN INSERT INTO produit(numero_produit,info1,info2)
VALUES ('$numero_produit''$info1','$info2');

Merci d'avance pour toutes explications sur MERGE !! J'ai bien cherché mais j'avoue que je pédale un peu dans la choucroute...

Guillaume