Import csv vers Mysql
5 messages
• Page 1 sur 1
- amazigh25
- WRInaute passionné

- Messages: 1006
- Inscription: 4 Juin 2005
Import csv vers Mysql
Bonjour
Pour un site j'ai eu besoin de faire un petit script pour importer des fichies csv vers une table Mysql.
Voici le script :
Le script n'affiche aucune erreur lors de son execution mais quand je vérifie si tous les enregistrements ont été importés je remarque qu'il ne le sont pas tous.
Exemple : De 1412 enregistrements juste 663 sont importés.
Questions :
Comment importés tous les enregistrements ?
Comment faire pour que les anciens enregistrements ne soit pas suprimés lors de l'import d'un nouveau fichier csv ?
Merci d'avance
Pour un site j'ai eu besoin de faire un petit script pour importer des fichies csv vers une table Mysql.
Voici le script :
- Code: Tout sélectionner
<?
mysql_connect('localhost', 'root', '');
mysql_select_db('mabase');
$row = 1;
$handle = fopen ("fichier.csv","r");
while ($data = fgetcsv($handle, 1000, ";"))
{
mysql_query("INSERT INTO matable(`id`, `marque`, `cartouche`, `Descriptif`, `Imprimante`, `fournisseur`, `url`) VALUES('".$row."', '".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."', '".$data[5]."')");
$row++;
}
fclose ($handle);
?>
Le script n'affiche aucune erreur lors de son execution mais quand je vérifie si tous les enregistrements ont été importés je remarque qu'il ne le sont pas tous.
Exemple : De 1412 enregistrements juste 663 sont importés.
Questions :
Comment importés tous les enregistrements ?
Comment faire pour que les anciens enregistrements ne soit pas suprimés lors de l'import d'un nouveau fichier csv ?
Merci d'avance
- spidetra
- WRInaute passionné

- Messages: 1500
- Inscription: 7 Juil 2003
Tu peux te simplifier la vie en utilisant la syntaxe LOAD DATA INFILE de mySQL.
http://dev.mysql.com/doc/refman/4.1/en/load-data.html
La syntaxe va ressembler à un truc de ce style
tu peux définir quels sont les séparateur de champ, les fins de ligne, les caractères qui entourent tes champs, etc....
Pour gérer l'import tu as aussi l'option IGNORE | REPLACE.
Cette option permet de savoir si tu remplace ou non les enregistrements déjà existant.
Dans ton cas tu veux l'option : IGNORE
Pour les lignes en erreur, il est possible que certaines lignes de ton fichier ne respectent pas les règles de ta table.
http://dev.mysql.com/doc/refman/4.1/en/load-data.html
La syntaxe va ressembler à un truc de ce style
- Code: Tout sélectionner
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';
tu peux définir quels sont les séparateur de champ, les fins de ligne, les caractères qui entourent tes champs, etc....
Pour gérer l'import tu as aussi l'option IGNORE | REPLACE.
Cette option permet de savoir si tu remplace ou non les enregistrements déjà existant.
Dans ton cas tu veux l'option : IGNORE
- Code: Tout sélectionner
LOAD DATA INFILE IGNORE 'data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';
Pour les lignes en erreur, il est possible que certaines lignes de ton fichier ne respectent pas les règles de ta table.
- amazigh25
- WRInaute passionné

- Messages: 1006
- Inscription: 4 Juin 2005
Salut
Merci spidetra j'ai réussi à régler ce problème.
J'ai une autre question s'il vous plait.
Dans une table 'imprimantes' il y'a plusieurs champs (id, marque, imprimante, cartouche, fournisseur ... ).
Dans une page je voudrais lister toutes les marques ça parrait facile :
Le problème ici c'est que dans la page où je met ce code, j'obtient plusieurs fois la même marque puisque plusieurs imprimantes peuvent avoir la même marque.
Comment faire pour afficher toutes la marque sans doublons ?
Merci encore
Merci spidetra j'ai réussi à régler ce problème.
J'ai une autre question s'il vous plait.
Dans une table 'imprimantes' il y'a plusieurs champs (id, marque, imprimante, cartouche, fournisseur ... ).
Dans une page je voudrais lister toutes les marques ça parrait facile :
- Code: Tout sélectionner
mysql_connect($host, $username, $password);
mysql_select_db($dbname);
$reponse = mysql_query("SELECT marque FROM imprimantes");
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<p><?php echo $donnees['marque']; ?> </p>
<?php
}
mysql_close();
?>
Le problème ici c'est que dans la page où je met ce code, j'obtient plusieurs fois la même marque puisque plusieurs imprimantes peuvent avoir la même marque.
Comment faire pour afficher toutes la marque sans doublons ?
Merci encore
- spidetra
- WRInaute passionné

- Messages: 1500
- Inscription: 7 Juil 2003
amazigh25 a écrit:Salut
Merci spidetra j'ai réussi à régler ce problème.
J'ai une autre question s'il vous plait.
Dans une table 'imprimantes' il y'a plusieurs champs (id, marque, imprimante, cartouche, fournisseur ... ).
Dans une page je voudrais lister toutes les marques ça parrait facile :
....
Le problème ici c'est que dans la page où je met ce code, j'obtient plusieurs fois la même marque puisque plusieurs imprimantes peuvent avoir la même marque.
Comment faire pour afficher toutes la marque sans doublons ?
Merci encore
DISTINCT est ton ami. Modifie ta requête.
- Code: Tout sélectionner
SELECT DISTINCT marque FROM imprimantes
5 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- La Solution CMS d'e-commerce (avec import CSV)
- Import fichier csv Erreur de syntaxe prsè de ...à la ligne 1
- mysql, fichier csv et accents
- Importation rapide de CSV dans MYSQL
- import css IE
- Import javascript VS backlink
- import contact -> gmail ?
- Création site import export
- RESOLU - (Prestashop) Import de catégorie
- Erreur import base sql
Consultez la description détaillée des produits ou services de Google suivants : Google Docs, Google Présentations
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
