Importation csv vers mysql avec mise à jour

Fermé
gvc001 Messages postés 20 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 1 juin 2010 - 7 avril 2010 à 11:19
gvc001 Messages postés 20 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 1 juin 2010 - 14 avril 2010 à 18:12
Bonjour,
je dispose d'une table mysql que j'aliment regulierement via un fichier CSV, aussi je souhaiterai savoir s'il est possible de mettre à jour la même table avec le format CSV, ceci pour permettre que ma table , lors des prochaines importations, ne prennent en compte que les champs des tables qui ont été modifié en plus de nouveaux enregistrements au lieu de me créer des doublons.
Sachant que l'enregistrement est identifié par un ID unique.

j'attends impatiement votre reponse

slt
A voir également:

2 réponses

Bonjour,
de quelle manière l'importation se fait en CSV?
Je ne sait pas si c'est possible de le faire en exportant de ton tableur vers un fichier SQL qui lui est transmis à la base et dans ce cas je ne peut aider.
Si c'est fait via un script php/asp, il faut que le CSV contienne aussi le champ identifiant(la clé primaire donc forcément unique).
Lors d'un update il faut indiquer une clause (pour sélectionner la ligne à modifier), et c'est dans la plupart du cas 'WHERE id='valeur de l'id.
Donc il n'y aura pas de doublon mais bien une mise à jour(la création d'une nouvelle ligne doublon ou pas ne peut être faite avec UPDATE, il s'agit de la commande INSERT, on met à jour quelque chose qui existe on inséres une nouvelle valeur dans la table).
En php il y a une fonction dédié à convertir les champs CSV en tableaux de variables:
fgetcsv() en ayant préalablement ouvert le dit fichier(fopen()).

Il suffit alors de comparer si l'identifiant(la clé)du tableau de variables existe dans la table mySQL. Dans un cas on fait un update sur la table, sinon on fait un insert.
J'espère avoir aidé.
0
gvc001 Messages postés 20 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 1 juin 2010
7 avril 2010 à 15:06
merci add_mi, pourriez vous me faire un petit topo pour me permettre de se fixer des idées, j'avaoue que je fais mes debuts quoique je sois hyper motivé à y arriver , Merci de votre temps
0
Yop, va voir par là. Dans n'importe quel langage toutes les réponses sont dans le manuel. Par là:

https://www.php.net/manual/fr/function.fgetcsv.php

il dit ça:
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num champs à la ligne $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
donc une boucle qui affiche le contenu du csv, pour pouvoir travailler avec il faut le mettre dans un tableau (array).

Il faut donc faire une requête sur la table pour obtenir le contenu déjà existant.

$resultats=mysql_query("SELECT * FROM matable");
$tab_result=mysql_fetch_array($resultats);
print_r($tab_result);

et donc comparer le champ identifiant du tableau obtenu par le csv au tableau obtenu par la requête sur la table.
Si l'identifiant existe il faut faire une requête UPDATE des champs de la table avec les valeurs du tableau obtenu sinon requête INSERT.
0
gvc001 Messages postés 20 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 1 juin 2010
14 avril 2010 à 18:12
Je vous remercie de votre apport add_min,
Je ne manquerai pas de tester cela demain sans faute et reviendrait vers vous add_min
à bientôt
0