Aller au contenu

PHP + CSV


ouladim

Messages recommandés

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)

Bonjour

j'ai un problème avec une commande.

J'ai un fichier CSV de 40 000 lignes et dans la colonne DATE_STATUT_COMPTA : le format est DD/MM/YYYY.

Je voudrai lors de mon LOAD FILE que ce format passe en YYYY-MM-DD car j'enregistre dans une table mysql.

j'ai essayé ca mais cela ne fonctionne pas.

mysql_query("LOAD DATA INFILE '$userfile' INTO TABLE $MyTable FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'

(@DATE_STATUT_COMPTA)

SET

DATE_STATUT_COMPTA = DATE_FORMAT(@DATE_STATUT_COMPTA, '%Y-%m-%d')

") or die (mysql_error());

si quelqu'un pourrai m'aider, merci, bonne journée

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

c'est normal les apostrophes (') autour du $userfile ?

Sinon ça a l'air correct (en meme temps j'ai jamais utilisé CVS, et extrèmement peu mySQL et PHP, je pourrai pas t'aider bcp.

C'est quoi ton retour ?

mysql_error ? Y'a un descriptif de message d'erreur ?

ou ca passe mais t'a pas la transformation désirée ?

Lien à poster
Partager sur d’autres sites

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)

Lol ^^ bah oui c'est normal sinon ca marche pas, c'est une variable dans une requete donc il faut mettre les apostrophes

mysql_query("LOAD DATA INFILE '$userfile' INTO TABLE psa_su FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'

") or die (mysql_error());

Merci de répondre quand cela peux m'aider !!!

Lien à poster
Partager sur d’autres sites

Membre, Forumeur tacheté , 37ans Posté(e)
ElNix Membre 4 891 messages
37ans‚ Forumeur tacheté ,
Posté(e)

Quelle est l'erreur ?

En utilisant PHP pour récupérer les données et changer le format de la date ça serait très facile mais par une commande SQL uniquement je ne savais même pas que c'était possible.

Merci de répondre quand cela peux m'aider !!!

Ca veut dire quoi ça ? J'aime pas trop.

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)
Lol ^^ bah oui c'est normal sinon ca marche pas, c'est une variable dans une requete donc il faut mettre les apostrophes

mysql_query("LOAD DATA INFILE '$userfile' INTO TABLE psa_su FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'

") or die (mysql_error());

Merci de répondre quand cela peux m'aider !!!

Alors pourquoi y'en a pas autour de '$mytable' ?

En utilisant PHP pour récupérer les données et changer le format de la date ça serait très facile mais par une commande SQL uniquement je ne savais même pas que c'était possible.

Il me semble que mySQL est un poil plus complet que SQL (mais c'est des vagues souvenirs)

Mais sinon, tu a raison, passer par PHP me semble plus approprié pour ça. (après faut voir en term de perf, je sais pas)

Lien à poster
Partager sur d’autres sites

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)

Alors en fait,

il n'y a pas d'erreur, le fichier csv est bien chargé dans ma table, cependant, toutes les dates se sont pas prises en compte car dans mon csv, les dates sont du format : exemple : 09/07/2010 et dans la table, le format est 2010/07/08 donc il n'enregistre pas la date et la valeur de la cellule de la table reste : 000-000-00.

Lien à poster
Partager sur d’autres sites

Membre, 36ans Posté(e)
Petisuis Membre 312 messages
Baby Forumeur‚ 36ans‚
Posté(e)

Essaie ça :

 mysql_query("LOAD DATA INFILE '$userfile' INTO TABLE $MyTable FIELDS  TERMINATED BY ';' LINES TERMINATED BY '\n' 
	(@DATE_STATUT_COMPTA)
	SET
	DATE_STATUT_COMPTA = STR_TO_DATE(@DATE_STATUT_COMPTA, '%d/%m/%Y')
	") or die (mysql_error());

Sachant que ton "DATE_FORMAT" ne sert à rien.

Lien à poster
Partager sur d’autres sites

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)
Essaie ça :

 mysql_query("LOAD DATA INFILE '$userfile' INTO TABLE $MyTable FIELDS  TERMINATED BY ';' LINES TERMINATED BY '\n' 
  (@DATE_STATUT_COMPTA)
  SET
  DATE_STATUT_COMPTA = STR_TO_DATE(@DATE_STATUT_COMPTA, '%d/%m/%Y')
  ") or die (mysql_error());

Sachant que ton "DATE_FORMAT" ne sert à rien.

Merci, j'avais déjà test mais ca marche pas, et en plus il me rempli bien la base mais les lignes sont vides

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

est tu certain de la syntaxe du '%Y-%m-%d' ?

est-ce qu'il n'y a pas un chevauchement de noms de DATE_STATUT_COMPTA, entre la table $MyTable et ta table résultat ? Comment distingue tu les 2 champs ?

Lien à poster
Partager sur d’autres sites

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)

DATE_STATUT_COMPTA : dans mon fichier csv

DATE_STATUT_COMPTA : dans ma table

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

oui, mais dans ta requète ? Tu devrait peut être les distinguer avec un truc du genre nom_de_table.nom_de_champ au lieu d'utiliser simplement nom_de_champ, qui peut porter a confusion.

Lien à poster
Partager sur d’autres sites

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)

Bonne idée mais ->

Rien à faire, c'est toujours pareil.

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

est-ce qu'il ne faudrait pas spécifier le format d'entrée de la date dans ta fonction DATE_FORMAT ou STR_TO_DATE ? Là, tu ne spécifie qu'un format de sortie.

Lien à poster
Partager sur d’autres sites

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)

j'en suis la, je regarde sur plein de site mais je trouve pas la bonne solution

LOAD DATA INFILE '$userfile' INTO TABLE psa_su FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'

(@DATE_STATUT_COMPTA)

SET

DATE_STATUT_COMPTA = DATE_FORMAT(STR_TO_DATE(@DATE_STATUT_COMPTA, '%d/%m/%Y'), '%Y-%m-%d')

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

j'arrive au meme code que toi avec cette page : http://dev.mysql.com/doc/refman/5.0/fr/dat...-functions.html

champ_de_table_destination = DATE_FORMAT(STR_TO_DATE( champ_du_CVS_source , '%d/%m/%Y'), '%Y-%m-%d')

Vu que je ne connait pas la syntaxe SQL, si tu me confirme qu'il n'y a pas de confusion sur les noms de champs similaires que tu a utilisé, le problème est ailleurs.

T'est sur que ton CVS est bien en "DD/MM/YYYY", y'a pas une couille genre pas le bon caractère pour / ou un espace au début du champ et qui invaliderait le format de lecture ?

Ou alors un encodage différent de celui sur lequel travaille mySQL pour ton CVS ?

A part ça, je vois pas.

T'a toujours la possibilité de faire ça la transformation du format de date en php, sinon.

Lien à poster
Partager sur d’autres sites

Membre, 36ans Posté(e)
Petisuis Membre 312 messages
Baby Forumeur‚ 36ans‚
Posté(e)

A moins que le champ ne soit de type CHAR et que le format de sortie soit différent de YYYY-MM-DD,

le DATE_FORMAT ne sert à rien quand on écrit dans une table où le champ est de type DATE.

Lien à poster
Partager sur d’autres sites

Membre, 38ans Posté(e)
ouladim Membre 15 messages
Baby Forumeur‚ 38ans‚
Posté(e)

Amen !

J'ai trouvé,

en fait, il faut préciser tous les champs

LOAD DATA INFILE '$userfile' INTO TABLE psa_su FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'

(IE_AFFAIRE,

NOMAFF_TIERS,

TIERS_CLIENT,

DATE_ENTREE_RECOUVREMENT,

CODE_STATUT,

DATE_STATUT,

CODE_STATUT_COMPTA,

@DATE_STATUT_COMPTA,etc....) SET DATE_STATUT_COMPTA = DATE_FORMAT(STR_TO_DATE (@DATE_STATUT_COMPTA,'%d/%m/%Y'),'%Y-%m-%d')

Voilà, merci de vos réponses

Lien à poster
Partager sur d’autres sites

Membre, 36ans Posté(e)
Petisuis Membre 312 messages
Baby Forumeur‚ 36ans‚
Posté(e)

Personne ne m'écoute :'(

Lien à poster
Partager sur d’autres sites

Membre, Forumeur tacheté , 37ans Posté(e)
ElNix Membre 4 891 messages
37ans‚ Forumeur tacheté ,
Posté(e)

Ca arrive, ne pleure pas c'est pas si grave :rtfm: *calin*

(désolé)

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×