Einträge aus CSV in DB schreiben - aber keine bereits importierten Zeilen

Hallo zusammen,

ich würde gerne eine CSV Datei (aufbau der Datei klar strukturiert und durch 3 Leerzeichen werden alle Spalten getrennt) täglich in meine mySQL DB schreiben lassen. Soweit auch kein Problem. Die CSV Datei liegt auf einem FTP.

Ich suche im Moment noch nach einem Königsweg, wie ich die bereits importierten Zeilen ausschließe.

Hatte schon die Idee, nach jedem Import den gesamten Text in eine String Variable zu schreiben, so habe ich dann immer einen alten Stand und könnte die neue Datei in eine zweite String Variable schreiben. Dann miteinander vergleichen und die neuen Zeilen importieren nach mySQL. Hört sich einfach an … Allerdings habe ich da noch keine Richtung in die ich loslaufen könnte. Es gibt zwarDiff-Klassen, allerdings weiß ich nicht, ob die mich so ans ziel führen. Deshalb die Frage mal hier in die Runde, ob jemand solch einen Vergleich von Dateien selbst schon umgesetzt hat?

Grüe und schönen Abend.

Hallo,

ich merke mir die ID des zuletzt importierten Datensatzes in einer Variable und fange dann beim nächsten Import entsprechend erst dort an.

Gruß,
Christoph

Hi,

solch eine eindeutige ID hätte ich mir im CSV File gewünscht. Leider gibt es diese nicht.

Ich könnte die Eindeutigkeit über zwei Felder herstellen (Datum und Zahlenstring). Könntest du mir mal kurz aufzeigen wie du es gemacht hast. Ich würde es dann entsprechend um das 2. Feld erweitern …

Danke :slight_smile:

Ich hole die Daten nicht aus einer CSV Datei, sondern aus einer MySQL Datenbank. Im SELECT Statement hole ich mir dann nur die Datensätze, bei welchen die ID größer ist, als die des zuletzt ausgelesenen Datensatzes.

Ich glaube, das hilft hier an der Stelle nicht weiter.

Wenn Deine Daten chronologisch in die CSV Datei geschrieben werden und Du einen TimeStamp hast, kannst Du damit arbeiten.

Gruß,
Christoph

Hallo FRAD,

ich mache das mit vielen MySQL-Tabellen so. Z.B. wenn sich ein Wert im Lauf des Tages entwickelt. z.B. Sonnenscheindauer. Die ist für mich eigentlich nur für die spätere Auswertung wichtig, aber ich möcht halt schon am selben Tag z.B. um 12 wissen wieviele Sonnenstunden wir heute schon hatten.
Grobes vorgehen: eine Abfrage auf gewünschte Werte machen und das Ergebnis zählen. Wenn alles richtig ist, bekommst Du entweder 0 ergebnis gibts noch nicht oder 1 ergebnis gibts schon. Wenn 0 dann neuer Datensatz + befüllen. Wenn 1 dann den Datensatz mit dieser ID mit den neuen Werten updaten.

if (!$MySQLConn)
 {IPS_LogMessage('Wetter_Internet_ToSQL', 'error= '. mysql_error());}
     $db_selected = mysql_select_db($db, $MySQLConn);

if (!$db_selected)
    {IPS_LogMessage('Wetter_Internet_ToSQL', 'opendb= '. mysql_error());}

    else
         {echo $TimeData."
";//date("Y.m.d H:i",$DateX)."
";
            $sql_query = mysql_query("SELECT DateTimeX
                                                FROM " . $SQLTable . " " .
                                                "WHERE DateTimeX = ".$TimeData.
                                                " ORDER BY DateTimeX desc".
                                                ";")
                                                OR die("'".$sql_query."':".mysql_error());
                        echo mysql_num_rows($sql_query)."
";
                        if(mysql_num_rows($sql_query)>=1)
                            {print_r("DatumZeit gibts schon 
");
                          $sql_update = mysql_query("UPDATE ".$TBL_Wetter_Internet."
                                                         SET Temperature = ".$Temperatur.",
                                                             Taupunkt = ".$Taupunkt.",
                                                             RedLuftdruck = ".$RedLuftdruck.",
                                                             WindGeschw = ".$WindGeschw.",
                                                             WindRichtungG = ".$WindRichtungG.",
                                                             Niederschlag = ".$Niederschlag.",
                                                             Datenherkunft = ".$Datenherkunft.",
                                                             Luftfeuchtigkeit = ".$Luftfeuchtigkeit."
                                          WHERE DateTimeX = ".$TimeData.";")
                                                        OR die("'".$sql_update."':".mysql_error());
                            if($sql_update)
                               {print_r("Daten gespeichert 
");}
                            else
                               {print_r("Daten nicht gespeichert 
");}
                            }
                        else
                            {print_r("DatumZeit gibts noch nicht 
");
                         $sql_insert = mysql_query("INSERT INTO ".$TBL_Wetter_Internet." (DateTimeX, Temperature, Taupunkt, RedLuftdruck, WindGeschw, WindRichtungG,
                                                            Niederschlag, Datenherkunft, Luftfeuchtigkeit)
                                                        VALUES ("
                                                        .$TimeData.", "
                                                        .$Temperatur.", "
                                                        .$Taupunkt.", "
                                                        .$RedLuftdruck.", "
                                                        .$WindGeschw.", "
                                                        .$WindRichtungG.", "
                                                        .$Niederschlag.", "
                                                        .$Datenherkunft.", "
                                                        .$Luftfeuchtigkeit.");")
                                                        OR die("'".$sql_Insert."':".mysql_error());
                            if($sql_insert)
                               {print_r("Daten gespeichert 
");}
                            else
                               {print_r("Daten nicht gespeichert 
");}
                            }

            }

Danke dir Wolfgang. Der Ansatz ist durchaus denkenswert. Werde mir das mal näher anschauen.