Luckyluk Posté 10 Novembre 2005 Posté 10 Novembre 2005 Bonjour, j'ai une table "zoneville" constitué de 4 champs id int autoincrement codepost varchar 6 ville varchar 30 zone varchar 2 j'ai un fichier excel au format csv (separateur en ; ) constitue d'une serie de ligne comme ceci 59230;nivelles;159226;lecelles;159230;st amand les eaux;159178;milonfosse;159178;bousignies;1 j'aimerais pouvoir remplir la table sans devoir me palucher tout çà dans le phpmyadmin j'ai essaye des requetes du genre LOAD DATA INFILE '/home/users/a/xxxxx/xxx/xxx/xxxxxx.csv' INTO TABLE zonebois FIELDS TERMINATED BY ';'LINES TERMINATED BY '\n';" j'ai toujours des messages d'erreur du style "acces denied etc..." j'ai essaye aussi a l'aide d'un fichier php en ligne dont le code est: <?php$localhost="xxxxx";$login="xxxx";$pass="xxxxx";$base="xxxxx";$table="xxxxx"; mysql_connect($localhost, $login, $pass); mysql_select_db($base); $req=mysql_query("LOAD DATA INFILE '/home/users/a/assoacier/www/fhl/villebois1.csv' INTO TABLE zonebois FIELDS TERMINATED BY ';'LINES TERMINATED BY '\n';"); ?> j'ai tendance à toujours vite capituler....mais là ça me gonfle... si une bonne ames passe par ici
Dan Posté 10 Novembre 2005 Posté 10 Novembre 2005 Salut Luc, Le "LOAD DATA INFILE" est en général interdit sur les serveurs mutualisés, question de sécurité. Le mieux est de modifier ce fichier pour le transformer en export au format sql. Sinon, il faut s'arranger avec le propriétaire d'un serveur dédié pour qu'il fasse le LOAD suivi d'un export qui te dépannera. Quelle version de mysql tournes-tu sur ton hébergement ?
NorSeb Posté 10 Novembre 2005 Posté 10 Novembre 2005 Salut, Ton problème vient peut-etre des droits d'accès au fichier. Sinon tu peux essayer aussi de te faire un petit programme qui ouvre le fichier, le lit ligne par ligne et qui insère les données...
Urban Posté 10 Novembre 2005 Posté 10 Novembre 2005 Pour ne pas te palucher les requêtes à la main tu peux faire un truc genre : cat fichier.csv | sed "s/^/insert into zoneville values\(\"/g" | sed "s/;/\",\"/g" | sed "s/$/\"\);/g" Ce qui pour ton exemple de données donne ça : insert into zoneville values("59230","nivelles","1");insert into zoneville values("59226","lecelles","1");insert into zoneville values("59230","st amand les eaux","1");insert into zoneville values("59178","milonfosse","1");insert into zoneville values("59178","bousignies","1");
Luckyluk Posté 10 Novembre 2005 Auteur Posté 10 Novembre 2005 salut, -> si celà peut te repondre concernant la version mysql http://www.dynamisme.fr/phpinfo.php par contre, pour que je file un load a faire faire à une bonne ames celà ne me derange pas mais comme je compte en ajouter d'autres par paquets un peu plutard, ça m'embeterai de devoir a chaque fois solliciter de l'aide.. vais peut etre me diriger vers la deuxieme soluce ... mais le "cat " ci dessus... pour moi c'est du charabia... est ce que les requetes du style insert into zoneville values("59178","bousignies","1"); sont valide? si l'on considere que dans ma ligne le premier champs de ma table "ID" n'est pas renseigné car il est supposé s'autoincrementer...
Dan Posté 10 Novembre 2005 Posté 10 Novembre 2005 C'est vrai que la deuxième solution a l'avantage de pouvoir être répétée sans problème. Mais si ton premier champs est en auto-incrément, il faut plutôt des lignes comme: insert into zoneville values("","59178","bousignies","1");
Dan Posté 10 Novembre 2005 Posté 10 Novembre 2005 Et un petit commentaire sur le design de ta table: Tu devrais utiliser des "char" plutôt que des "varchar", principalement pour les champs codepost et zone. Ce sera plus efficace en matière de stockage et d'accès. Et attention aux codes postaux, 6 caractères suffisent pour les codes postaux de Belgique, mais si ta table contient des données d'autres pays, cela pourrait ne pas suffire
Compte supprimé Posté 10 Novembre 2005 Posté 10 Novembre 2005 Si la manip est interdite sur le mutualisé, pourquoi ne pas le faire en local puis exporter la base au format sql ??
Urban Posté 10 Novembre 2005 Posté 10 Novembre 2005 Désolé, j'avais pas fait gaffe que tu avais un champ id. Si tu n'est pas famillier avec Unix, tu peux faire la même chose avec un "remplacé" dans notepad. Par contre je ne sais pas trop s'il y a un équivalent aux ^ et $ des expressions régulières. S'il n'y a pas d'équivalent tu peux toujours installer cygwin et taper la commande dans cygwin : cat fichier.csv | sed "s/^/insert into zoneville values(\"\",\"/g" | sed "s/;/\",\"/g" | sed "s/$/\");/g" J'ai viré les \ avant les parenthèses qui ne servaient à rien et ajouté ce qu'il faut pour ton auto-incrément. En fait cat affiche le contenu du fichier, le signe | renvoi le résultat sur le premier sed qui ajoute en début de ligne : insert into zoneville values(""," ensuite est appliqué le 2eme sed qui remplace les ; par : "," et le dernier sed ajoute en fin de ligne : ");
Luckyluk Posté 11 Novembre 2005 Auteur Posté 11 Novembre 2005 je ne connaisaissais pas le cat... mais tres bien le "remplacer" dans ultraedit... ça ne m'a donc pas posé de probleme.. par contre, ça ne m'a pas apri...grand chose en php mysql.. juste la syntaxe de "insert" tant pis ce sera pour plutard.. le fopen...etc... Mais en tout cas çà a marché ! encore merci
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant