CSV Datei Import aber mit Besonderheit

HansiHinterseher

Benutzer
Beiträge
12
Hallo Liebe DB Spezies,

ich muss erstmal sagen das ich eigentlich wenig mit Datenbanken zu tun habe, wollte aber jetzt mal einem Freund bei einem Schulprojekt helfen, da ich es vor Jahren auch mal halbwegs konnte...

Es geht darum das ich relativ simpel eine .csv Datei in meine MySQL Datenbank einlesen will. Dazu habe ich:

1. im PHPMyAdmin eine Datenbank mit der entspr. Tabelle und den Datentypen erstellt
2. ein typisches LOAD LOCAL DATA INFILE an meine Situation angepasst.

Alles gut und schön, klappt soweit. 2 offene Fragen gibt es aber, da ich leider kein SQL Spezi bin:
- in der CSV Datei (Komma separated) steht an 5ter Stelle eine Zahl die eigentlich völlig belanglos ist. Wie schaffe ich das diese Zahl garnicht eingelesen wird? Keywords like IGNORE...?
- die letzte Spalte meiner Tabelle soll eine Addition der Dezimalwerte aus Spalte 2 und 3 sein. Mache ich das NACHDEM die CSV Daten eingelesen sind mit einem UPDATE Kommando oder kann ich schon während des einlesen selbst sowas programmieren?

Besten Dank schonmal!
Ihr helft einem Noob, jede Hilfe ist willkommen ;-)
 
Werbung:
Hallo Liebe DB Spezies,

ich muss erstmal sagen das ich eigentlich wenig mit Datenbanken zu tun habe, wollte aber jetzt mal einem Freund bei einem Schulprojekt helfen, da ich es vor Jahren auch mal halbwegs konnte...

Es geht darum das ich relativ simpel eine .csv Datei in meine MySQL Datenbank einlesen will. Dazu habe ich:

1. im PHPMyAdmin eine Datenbank mit der entspr. Tabelle und den Datentypen erstellt
2. ein typisches LOAD LOCAL DATA INFILE an meine Situation angepasst.

Alles gut und schön, klappt soweit. 2 offene Fragen gibt es aber, da ich leider kein SQL Spezi bin:
- in der CSV Datei (Komma separated) steht an 5ter Stelle eine Zahl die eigentlich völlig belanglos ist. Wie schaffe ich das diese Zahl garnicht eingelesen wird? Keywords like IGNORE...?
- die letzte Spalte meiner Tabelle soll eine Addition der Dezimalwerte aus Spalte 2 und 3 sein. Mache ich das NACHDEM die CSV Daten eingelesen sind mit einem UPDATE Kommando oder kann ich schon während des einlesen selbst sowas programmieren?

Besten Dank schonmal!
Ihr helft einem Noob, jede Hilfe ist willkommen ;-)


Lese das Zeugs in eine temp. Tabelle ein und fülle aus dieser die Zieltabelle. Dein zweiter Punkt ist übrigens ein massiver Verstoß gegen die Regeln des vernünftigen Benehmens, ähm, Datenbankdesigns. Als Dein Informatik-Lehrer bekommst dafür 'ne glatte 5.
 
Hallo akretschmer,

erstmal danke!
Du meinst ich soll in der Datenbank jetzt also noch eine temporäre Tabelle erstellen und von dort nur die "gewünschten" Werte von Temp Table in richtige Table schreiben? Verstehe ich das richtig - wenn ja gib mir bitte das "Stichwort" was ich nachlesen muss um von Tabelle 1 in 2 zu schreiben.

Zu meinem zweiten Punkt;-) Erkläre mal bitte genauer was ich so schreckliches gemacht habe, wie gesagt ich hab leider nix mit DBs zu tun ;-) Aber ich bin lernwillig!
 
Hallo akretschmer,

erstmal danke!
Du meinst ich soll in der Datenbank jetzt also noch eine temporäre Tabelle erstellen und von dort nur die "gewünschten" Werte von Temp Table in richtige Table schreiben? Verstehe ich das richtig - wenn ja gib mir bitte das "Stichwort" was ich nachlesen muss um von Tabelle 1 in 2 zu schreiben.
Das wäre ein Weg. Möglicherweise kann man auch anders eine Spalte auslassen, ich weiß nur grad nicht wie.

Zu meinem zweiten Punkt;-) Erkläre mal bitte genauer was ich so schreckliches gemacht habe, wie gesagt ich hab leider nix mit DBs zu tun ;-) Aber ich bin lernwillig!

Deine letzte Spalte ist immer und jederzeit aus Spalte 2 und 3 berechenbar. Das extra zu speichern hat die Nachteile a) daß es extra Speicher kostet und b) das es schwer ist, sicherzustellen, daß es immer und unter allen Umständen konsistent ist. Von daher ist Deine geplante 'letzte Spalte' flüssiger als Wasser - überflüssig.
 
Hallo akretschmer,

zu 1:
ja gut, also von Hilfstabelle die Spalten auswählen und in richtige Tabelle kopieren, sollte in etwa so gehen:

INSERT INTO tabelle2 (id, spalte2, spalte3)
SELECT id, spalte2, spalte3
FROM tabelle1 WHERE id = 5;

zu 2:
ja - jetzt habe ich dich natürlich verstanden! vom logischen gesichtspunkt hast du völlig recht!

Ich teste mein Punkt 1 mal... Besten Dank!
 
Werbung:
Letzteres könnte man mit einer Abfrage oder einer Sicht auf die Tabelle sehr schön lösen. Dies wäre der vernünftige Weg.
Code:
SELECT    id,
        spalte2,
        spalte3
FROM    tabelle
UNION ALL
SELECT    NULL AS id,
        sum(spalte2) AS spalte2,
        sum(spalte3) AS spalte3
FROM    tabelle
Per Sortierung kann man dann auch noch sicher stellen, das die Summe immer unten steht:
Code:
SELECT    t.id,
        t.spalte2,
        t.spalte3
FROM    ( SELECT    0 AS sort,
                    id,
                    spalte2,
                    spalte3
            FROM    tabelle
            UNION ALL
            SELECT    1 AS sort,
                    NULL AS id,
                    sum(spalte2) AS spalte2,
                    sum(spalte3) AS spalte3
            FROM    tabelle ) t
ORDER BY t.sort,t.id
 
Zurück
Oben