Csv vers mysql savec mise à jour des données

Fermé
gvc001 Messages postés 20 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 1 juin 2010 - 7 avril 2010 à 12:41
gvc001 Messages postés 20 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 1 juin 2010 - 14 avril 2010 à 17:46
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:

3 réponses

Salut !

Les fichiers CSV sont séparés par des points-virgule, je pense.
Lors de l'importation (en PHP je suppose), tu as la lecture du fichier, la récupération des variables, et l'insertion dans la BDD.

Quand tu récupères les variables, effectue un tri :

// Lecture du fichier
// Récupération et mise en variable
// $variable 1, $variable2 et $variable3 sont des valeurs récupérées du fichier.

// Connexion à la BDD

$donnees = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS nombre FROM table WHERE champ1='$variable1', champ2='$variable2', champ3=$variable3'"));

if($donnees['nombre']==0){

// Soit insertion, soit mise à jour (je ne sais pas comment te repérer, tu ne l'as pas spécifié)

}
else{
echo "Cette ligne existe déjà !";
}

mysql_close();


Voila ;)

Ps : Lors de l'insertion/update, effectue toi-même un tri au cas où tu voudrais modifier, je ne sais pas comment tu t'y prend pour cela;

Cordialement.

Ps 2 : j'ai peut-être fait une erreur de syntaxe dans ce code, je ne l'ai pas essayé.
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:02
Merci bilow pour ton aide, seulement je ne dispose pas d'une page web via laquelle je gere l'importation. je souhaiterai le faire le plus basiquement possible.
Pour tout dire , je dispose d'une base avec la table dont j'ai besoin de mettre à jour via un fichier CSV et le fichier CSV proprement dit avec des champs separés par un point virgule.
je souhaite avoir plus d'orientation possible car je suis pas trop avancé avec le PHP. je n'ai pas besoin de page web , que besoin d'un script quelconque pour m'aider à gerer mon importation et surtout la mise à jour des données deja existantes.

Merci une fois de plus pour l'attention et le temps que vous accorderez à mon post
0
Salut,

Si ton fichier reste complet, et subit des modifications, mais pas la base, supprime toutes les données de la base, et recharge le fichier CSV. Ce sera réinitialisé.

Sinon, je suppose que tu utilise phpMyAdmin (si ce n'est pas le cas, peut-importe);
Vraiment sans page web, je ne voit comme seule solution : effectuer des requêtes SQL qui suppriment les doublons.

Pour cela, essaie de chercher un code sur internet qui en est capable, pcq je ne vois pas comment faire. Et encore, les codes que tu trouveras seront sur des pages web, essaie de formuler ça sur ton phpMyAdmin en language SQL...

Bye ;)

Ps : Voici un code tout fait, qui me semble bien (il sélectionne tout sauf les doublons, supprime les données, résinsère les données sans doublons);

<?php
// Connexion
//mysql_query(" SELECT DISTINCT id, courses, dates FROM tempcourse
$rqSql = "SELECT DISTINCT courses, dates FROM tempcourse";
$result = mysql_query( $rqSql, $idConnect);
mysql_query("DELETE FROM tempcourse"); 
while ( $row = mysql_fetch_array( $result)) {
mysql_query("INSERT INTO tempcourse (courses, dates) VALUES ('" . $row['courses'] . "', '" . $row['dates'] . "')"); 
}
mysql_close();
?>
0
Bonjour,

D'après moi ; pas besoin de coder, des outils sont déjà existants.
Pour une BDD mysql, l'outil mysqlimport devrait te permettre de charger ton fichier csv facilement et sans problèmes.

Tu trouveras plein d'exemple sur google, notemment ici :
https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html

Comme tu ne souhaite pas de doublons ;
L'option --delete devrait être utilisée pour vider la table avant de la recharger.

PS : @Bilow : un fichier csv peut avoir n'importe que délimiteur, pas seulement le ";".
Mais tu peux configurer ce séparateur dans mysqlimport...

Cordialement, M.
0
gvc001 Messages postés 20 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 1 juin 2010
14 avril 2010 à 17:46
slt Swed pour ta reponse, effectivement je ne souhaite pas faire ma mise à jour de toute ma table , juste les données dur une periode donnée, d'où l'incapicité de vider la table comme tu le souhaite.
0