Christoph: CSV in My SQL Datenbank importieren und zwar umgedreht!

Hallo zusammen,

ich nutze zur Zeit ein Newsscript, welches als Speicher der Meldungen eine .dat-Datei verwendet. Nun will ich das Ganze auf My SQL umstellen und habe daher die .dat-Datei mit folgender Funktion in die Datenbank importiert:

LOAD DATA LOCAL
        INFILE '/home/www/servers/www.servername.de/tmp/import.csv'
        REPLACE
        INTO TABLE tabellenname
        FIELDS
                TERMINATED BY ';';

Jetzt ist es aber so, dass das Newsscript die neusten Meldungen in der .dat-Datei immer ganz nach oben geschrieben hat. Bedeutet, wenn ich in der Datenbank nun eine Tabelle mache und dort ein id-Feld, welches auf auto_increment steht, hat die neuste News im .dat-File die ID 1 und die älteste die letzte ID. Wenn ich jetzt eine neue Meldung in die Datenbank eintrage, setzt die sich ja ans Ende und bekommt eine ID Zahl hoher als die vorherige. Wenn ich aber jetzt die Datenbank auslese, kommt die neuste News die ich direkt in die Datenbank eingetragen habe ganz oben und dann kommen erstmal die alten Meldungen, die ich durch das CSV-File importiert habe. Da ja die neuste Meldung im .dat-File die ID 1 hat, da beim Import einer CSV-Datei das ganze ja von oben nach unten ausgelesen wird.

Nun meine Frage: Wie schaffe ich es, dass phpMyAdmin die .dat-Datei von unten nach oben ausliest und nicht von oben nach unten? Vielleicht gibt es ja eine viel einfachere Lösung für mein Problem, die ich nur nicht kenne! Über Hilfe freue ich mich.

Gruß
Christoph

  1. Hallo,

    du machst dort gerade zwei bei Datenbanken nur bis zum Tellerrand-schauende Dinge:

    1. Du glaubst, die Reihenfolge in der die Daten in der Tabelle stehen wäre relevant. Das mag zwar den Anschein erwecken, du darfst dich aber nicht darauf verlassen
    2. Du glaubst, eine AutoIncrement-Wert wäre für eine Sortierung geeignet. Seinen primären Zweck erfüllt das Ding als Primärschlüssel-Generator, du solltest NICHT davon ausgehen, dass die Werte aufsteigend, lückenlos oder sonstiges sind.
      Wenn du sowas benötigst solltest du eine eigene Sortierungsspalte einfügen oder z.B. einfach ein Datum nehmen.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  2. Hallo Christoph,

    in Unwissenheit einer besseren Lösung habe ich folgenden Vorschlag. Rechne doch nach dem Einlesen die IDs um. Das kannst du mit mit einem generischen SQL Query bewerkstelligen etwa dieser Art:

    UPDATE table SET id = MAX(id) - id + 1;

    ich denke du verstehst die Kernessenz. Es kann allerdings sein, dass du erst den AUTO_INCREMENT entfernen und dann wieder einfügen musst. Und es ist auch denkbar, dass MAX(id) sich während der Ausführung dieses Queries ändert und damit alles verhunzt. Diese dinge verbleiben für dich zum ausprobieren, aber wenn du damit durch bist hast du eine Lösung, die du immer wieder verwenden kannst.

    Gruß,
    Cruz