# CSV Datei in MYSQL importieren



## adil (7. August 2006)

Hallo alle,
ich habe eine Tabelle,die heisst *auto und enthält kennzeichen, km_stand,fuell_menge *als Attributen mit der kennzeichen als primary key.
*ich bekomme jede Woche eine CSV-Datei, die kennzeichen, km_stand,fuell_menge von der Tabelle auto enthält und auch neue Datensätze(kennzeichen, km_stand,fuell_menge *) die in der Tabelle auto eingefügt werden soll.
weisst vielleicht jemanden, wie kann ich die neue CSV Datei in meiner Tabelle auto einfügen,ohne die alte Datensätze verloren gehen.
MfG
Adil


----------



## Matthias Reitinger (7. August 2006)

Hallo,

für solche Fälle gibt es LOAD DATA INFILE.

Grüße,
 Matthias


----------



## adil (7. August 2006)

hallo,
ja hast du recht,möchte ich auch meine alte Datensätze behalten, vielleicht fehlt eine Datansatz in der neue CSV Datei, deswegen muss ich zuerst die datensätze vergleichen. 
ich habe mit JOIN gearbeitet, aber ich weiss nicht wie ich das importieren soll.
ich habe so gemacht

```
select * from auto UNION select * from csv
```


----------



## Matthias Reitinger (7. August 2006)

Hallo,

du musst die Datensätze nicht vergleichen. LOAD DATA INFILE ergänzt eine Tabelle lediglich um die Daten einer externen Datei. Es werden hierbei keine Datensätze gelöscht.

Grüße,
 Matthias


----------



## adil (7. August 2006)

vermutten wir, dass es eine kennzeichen von der Tabelle auto nicht in der neue CSV Datei gibt, wenn ich mache, was du sagst, dann wird eine Datensatz gelöscht.
 B.S
tabelle auto                                      CSV 

kennzeichen                                kennzeichen
 f-n 123                                            f-n 123                                            
 f-n 234                                            f-n 234
 f-n 421                                            M-m 888
                                                        M-z 999
in diesem Fall wird die Dritte Datensatz gelöscht
Mfg


----------



## Matthias Reitinger (7. August 2006)

Hallo,

und wieso sollte dieser Datensatz gelöscht werden?

Grüße,
 Matthias


----------



## adil (7. August 2006)

muus man immer probleme vorstellen


----------



## Matthias Reitinger (7. August 2006)

Hallo,

ich verstehe nicht ganz, was du meinst.

Angenommen in der Tabelle steht folgendes:

```
+-------------+
| kennzeichen |
+-------------+
|    AB-123   |
|    CD-456   |
|    EF-789   |
+-------------+
```
Weiterhin haben wir diese CSV-Datei:

```
AB-123;…
EF-789;…
GH-012;…
```
Dann werden mit LOAD DATA INFILE die Zeilen AB-123 und EF-789 entweder durch die Daten aus der CSV-Datei ersetzt (mit dem Schlüsselwort REPLACE) oder in Ruhe gelassen (Schlüsselwort IGNORE). Die Zeile GH-012 aus der Datei wird der Tabelle hinzugefügt. Mit CD-456 passiert überhaupt nichts, wird also auch nicht gelöscht. 

Grüße,
 Matthias


----------



## adil (9. August 2006)

Also ich habe folgende Code.also mit IGNOR geht .


```
<?php
          // Definition der Datenbanken und csv-Dateien

          $db_MenuTitle[0]  = "ADIL";         // Bezeichnung des Eintrags - erscheint im Dropdown
          $db_Hostname[0]   = "localhost";         // Datenbank-Host (muss nicht zwingend immer localhost sein)
          $db_UserName[0]   = "root";                  // Benutzername f&uuml;r diese Datenbank
          $db_Password[0]   = "";                  // Zugehoeriges Passwort
          $db_Database[0]   = "filme";                  // Datenbank, auf die zugegriffen werden soll
          $db_Table[0]      = "x-man";                  // Table, in den die CSV-Datei &uuml;bertragen werden soll
          $db_File[0]       = "D:\htdocs";       // Verzeichnispfad zur Textdatei (CSV etc.) auf dem Webserver
          $db_Terminated[0] = ";";      // Trennzeichen, das in der Textdatei verwendet wird

            // Connect zur Datenbank
            
            include ("config.php");
            
      
			
           
             $del = "DELETE FROM ".$db_Table[0];

           
            $sql = "LOAD DATA INFILE "$db_File[0]" IGNOR INTO TABLE "$db_Database[0] "  FIELDS TERMINATED BY ';'";

            // MySQL-Statements ausf&uuml;hren
            if (mysql_query ($sql) && mysql_query ($sql)) {
                $message = "&Uuml;bertragung erfolgreich";
                }
            else {
                $message = "&Uuml;bertragung fehlgeschlagen. Grund: ". mysql_error ();
                }


     



      // Generierung des DropDown-Menues

      function generate_dropdown ()
	{

          global $db_MenuTitle, $db_Hostname, $db_UserName, $db_Password, $db_Table, $db_File, $db_Terminated;


          if (is_array ($db_MenuTitle)) 
		  {

              reset ($db_MenuTitle);

              while (list ($key, $val) = each ($db_MenuTitle))
			   {
                  echo "<option value=\"".$key."\">".$val."</option>";
               }

          }

    }


?>



<html>
  <head>
    <title>CSV to SQL</title>
  </head>
  <body bgcolor="#EAEAEA">
    <form action="<?php echo $PHP_SELF; ?>" method="POST">
      <table border="0" cellspacing="0" cellpadding="5" bgcolor="#C0C0C0" width="50%">
        <tr>
          <th>CSV to MySQL</th>
          <th>&nbsp;</th>
        </tr>
        <tr valign="bottom">
          <td>
            <select name="select_db" size="<?php echo count ($db_MenuTitle); ?>">
              <?php generate_dropdown (); ?>
            </select>
          </td>
          <td>
            <input type="Submit" name="submit" value="Und los!">
          </td>
        </tr>
        <input type="file" size="20" name="file" /><br /><br />
      </table>
    </form>

    <p><?php echo $message; ?></p>

  </body>
</html>
```


----------

