Alternate 5
Alternate 4

CSV-Import-Updatefunktion

rony

Commodore Pro
🎅Rätsel-Elite ’10
Registriert
Jan. 2007
Beiträge
4.987
Hallo,

ich bin immernoch an der Inventardatenbank - wegen der ich hier schon einige fragen gestellt habe.

Nun hat mein Vorgänger einen CSV-Import eingebaut.

Dieser funktioniert auch ganz gut, darunter hat er jedoch eine Checkbox angelegt, mit der man die Datenbank updaten kann.

Dieses update funktioniert leider nicht, so wurden sämmtliche Einträge in der Datenbank überschrieben (insgesamt ü. 4100).

Ok, kurz schwitzige Hände bekommen, und das vorher erstellte Backup wieder hergestellt. :)

Nun wollte ich eine neue CSV-Import-Funktion bauen.

Bei uns haben alle Geräte eine Serinnummer, leider fehlen jedoch unsere Inventarnummern, und auch noch weitere Daten (Raum, Gerätehersteller, Gerätetyp etc...).

Nun dachte ich an eine art SQL Befehl nach dem Motto:

UPDATE `tabelle` SET info1, info2, info3, ..., WHERE `tabelle`.`ID` = seriennummer

Bin ich da mit meiner Vorstellung richtig, dass ich so die vorhanden Seriennummern mit den zusätzlichen datensätzen erweitern kann?

Nun sollen aber alle nicht vorhandenen Seriennummern neu eingetragen werden.

Ich bin da ja kein entwickler, sondern mache eig. was andere, bringe mir das aber alles geade bei ^^...
Also nicht zu hoch ansetzten :rolleyes:
 
ich hab mich mal rangesetzt und eine csv-import funktion gebaut... diese funktioniert auch so ganz gut...

Nun da ich nun jeden wert habe, dachte ich mir, dass ich nun, werte nach seriennummer suchen updaten kann.

Mal der Code:

PHP:
<?php

$config = array();

$config["server"] = "localhost";
$config["user"] = "root";
$config["password"] = "";
$config["database"] = "test";

mysql_connect($config["server"], $config["user"], $config["password"]);
mysql_select_db($config["database"]);

$fp = fopen("test.csv", "r");

$wert = array();

while(!feof($fp)) {
    $wert = fgetcsv  ( $fp  , 4096 , ";"  );
    
    $inv = $wert[0];
    $sn = $wert[1];
    $name = $wert[2];
    
    $SQL = "UPDATE `test` SET `inv` = '".$inv."', `name` = '".$name."' WHERE `test`.`sn` = ".$sn." ";
    $ausgabe = mysql_unbuffered_query($SQL);
    
    if($ausgabe != 1) {
        $SQL = "INSERT INTO `test`.`hw` (`id`, `inv`, `sn`, `name`) VALUES (NULL, '".$inv."', '".$sn."', '".$name."')";
        $ausgabe = mysql_unbuffered_query($SQL);
    }
}
fclose($fp);
?>
Wie gesagt, die insert into geschichte funktioniert, das update jedoch nicht.... der sql-query gibt immer nichts zurück, wodurch dann der eintrag neu angelegt wird.

edit: ich dussel... ich hab die tabelle flasch beannt.... da kann man natürlich ewig auf den code starren und sieht den fehler nicht ^^
 
Zuletzt bearbeitet:
PeteC schrieb:
In einigen DBMS gibt es dafür "REPLACE INTO", z.B. MySQL

Ein UPDATE aktualisiert immer nur, fügt jedoch keine neuen Datensätze ein!

http://dev.mysql.com/doc/refman/5.1/de/replace.html

Wie auch dort sicher erwähnt: INSERT INTO ... ON DUPLICATE UPDATE... ist oftmals die bessere Wahl, da REPLACE einen duplizierten Datensatz erst löscht und dann neu anlegt. Das versaut dir ganz schnell den Tag, z.B. wenn du InnoDB mit Foreign Key und "on delete cascade" nutzt.
 
Zurück
Oben