Aller au contenu

PHP + CSV


Messages recommandés

ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
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

Partager ce message


Lien à poster
Partager sur d’autres sites
Annonces
Maintenant
miq75 Membre 2 862 messages
90°‚ 42ans
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 ?

Modifié par miq75

Partager ce message


Lien à poster
Partager sur d’autres sites
ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
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 !!!

Partager ce message


Lien à poster
Partager sur d’autres sites
ElNix Membre 4 891 messages
Forumeur tacheté ‚ 30ans
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.

Modifié par ElNix

Partager ce message


Lien à poster
Partager sur d’autres sites
miq75 Membre 2 862 messages
90°‚ 42ans
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)

Modifié par miq75

Partager ce message


Lien à poster
Partager sur d’autres sites
ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
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.

Partager ce message


Lien à poster
Partager sur d’autres sites
Petisuis Membre 312 messages
Forumeur survitaminé‚ 29ans
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.

Modifié par Petisuis

Partager ce message


Lien à poster
Partager sur d’autres sites
ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
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

Partager ce message


Lien à poster
Partager sur d’autres sites
miq75 Membre 2 862 messages
90°‚ 42ans
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 ?

Modifié par miq75

Partager ce message


Lien à poster
Partager sur d’autres sites
ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
Posté(e)

DATE_STATUT_COMPTA : dans mon fichier csv

DATE_STATUT_COMPTA : dans ma table

Partager ce message


Lien à poster
Partager sur d’autres sites
miq75 Membre 2 862 messages
90°‚ 42ans
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.

Modifié par miq75

Partager ce message


Lien à poster
Partager sur d’autres sites
ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
Posté(e)

Bonne idée mais ->

Rien à faire, c'est toujours pareil.

Partager ce message


Lien à poster
Partager sur d’autres sites
miq75 Membre 2 862 messages
90°‚ 42ans
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.

Partager ce message


Lien à poster
Partager sur d’autres sites
ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
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')

Partager ce message


Lien à poster
Partager sur d’autres sites
miq75 Membre 2 862 messages
90°‚ 42ans
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.

Modifié par miq75

Partager ce message


Lien à poster
Partager sur d’autres sites
Petisuis Membre 312 messages
Forumeur survitaminé‚ 29ans
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.

Partager ce message


Lien à poster
Partager sur d’autres sites
ouladim Membre 15 messages
Forumeur balbutiant‚ 32ans
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

Partager ce message


Lien à poster
Partager sur d’autres sites
Petisuis Membre 312 messages
Forumeur survitaminé‚ 29ans
Posté(e)

Personne ne m'écoute :'(

Partager ce message


Lien à poster
Partager sur d’autres sites
ElNix Membre 4 891 messages
Forumeur tacheté ‚ 30ans
Posté(e)

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

(désolé)

Modifié par ElNix

Partager ce message


Lien à poster
Partager sur d’autres sites
Annonces
Maintenant

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×

Information importante

Ce site internet utilise des cookies pour améliorer l'expérience utilisateur. En naviguant sur ce site vous acceptez que des cookies soient placés sur votre navigateur. Conditions d’utilisation Politique de confidentialité