Import csv vers Mysql

amazigh25
WRInaute passionné
WRInaute passionné
 
Messages: 1006
Inscription: 4 Juin 2005

Import csv vers Mysql

Message le Sam Juin 03, 2006 13:58

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 :

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é
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Sam Juin 03, 2006 14:38

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
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é
WRInaute passionné
 
Messages: 1006
Inscription: 4 Juin 2005

Message le Sam Juin 03, 2006 16:33

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 :
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é
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Sam Juin 03, 2006 16:38

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

amazigh25
WRInaute passionné
WRInaute passionné
 
Messages: 1006
Inscription: 4 Juin 2005

Message le Sam Juin 03, 2006 16:50

C'est bon j'ai trouvé

Merci quand même !


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité