Avatar billede kinnaj Nybegynder
30. september 2009 - 08:19 Der er 7 kommentarer

CSV til MySQL

Hej Alle,

Når jeg nu har en csv fil, jeg får dumpet på min ftp-server - hvordan får jeg så smartest den ind i en MySQL database?

Kan man kører en while, på en csv fil, som om datakilden var en database, og hvordan?

Dbh jannik :)
Avatar billede repox Seniormester
30. september 2009 - 08:40 #1
Hvis felterne i CSV'en stemmer overens med tabellen, kan du loade filen ind i MySQL direkte.

Men ellers, så ville jeg nok gøre noget ala:


<?php


  $inserts = array();

  foreach($lines_from_csv as $line)
  {
    $cells = explode("," $line);
    $inserts[] "('".$cells[0]."', '".$cells[1]."', '".$cells[2]."')";
  }

  $sql = "INSERT INTO table VALUES ".implode(",", $inserts);
  mysql_query($sql);
?>
Avatar billede kinnaj Nybegynder
30. september 2009 - 08:52 #2
Jamen hvordan kan jeg loade den ind automatisk? Felterne er ens, jeg har blot en Id (Auto increment) udover, som automatisk skal tælle op.. Hvordan får den fat i filen i dit script? :)

/Jannik
Avatar billede repox Seniormester
30. september 2009 - 09:01 #3
MySQL kan loade filer ind, således:

LOAD DATA LOCAL INFILE '/importfile.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(felt1, felt2, felt3);


Og i mit script antog jeg egentlig at du selv vidste hvordan man kunne manipulere med filer i PHP.
Men du kan da lige få den ene linie med:

<?php

  $lines_from_csv = file("/importfile.csv"); // ren magi...

  $inserts = array();

  foreach($lines_from_csv as $line)
  {
    $cells = explode("," $line);
    $inserts[] "('".$cells[0]."', '".$cells[1]."', '".$cells[2]."')";
  }

  $sql = "INSERT INTO table VALUES ".implode(",", $inserts);
  mysql_query($sql);
?>
Avatar billede kinnaj Nybegynder
30. september 2009 - 09:15 #4
Hej igen,
Tak, det med MySQL virkede.. Men kan man sætte den til at den skal tjekke om recordsne er der - så den updater, hvis den er der i forvejen?

Dbh jannik
Avatar billede repox Seniormester
30. september 2009 - 09:23 #5
Så skal du ud i nogle ret avancerede SQL forespørgsler, hvor det alligevel nok havde været nemmere at lade PHP kontrollere de ting sammen med MySQL for dig.
Avatar billede kinnaj Nybegynder
30. september 2009 - 11:53 #6
Fin ide ;-) Tak - det virker nu..

Når den importere min csv fil, kommer den ind uden æøå.. Kan man på nogle måde i php eller linux commando, få den konventeret til fx ANSII eller noget der understøttes?
Avatar billede repox Seniormester
30. september 2009 - 11:59 #7
Du skal naturligvis matche dine tegnsæt.
Hvis din database vil behandle dataene som UTF-8, skal din datafil selvfølgelig også være UTF-8 encoded.

Og det samme gælder med eksempelvis ISO-8859-1.

Nu ved jeg ikke hvad hverken din fil eller hvad MySQL bruger af tegnsæt, men det kan du forhåbentlig selv finde ud af og så enten lade MySQL snakke det du gerne vil eller konvertere filen til at matche MySQL's tegnsæt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester