CSV Import Feld überspringen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CSV Import Feld überspringen?

    Hi,

    gibt es eine Möglichkeit bei einem CSV Import per Load Data Infile bestimmte Felder in der CSV-Datei zu überspringen?

    Also
    ichbineinecsv.csv

    Feld1,12,Feld3

    Nun möchte ich nur '12' und Feld3 importieren zum Bsp.


    Grüße
    cu LaHood

  • #2
    probiers mal mit phpmyadmin.
    dort steht auch beim import von dateien diese option.
    If you wish to load only some of a table's columns, specify a comma separated field list.
    du musst also dann alle spalte angeben, die importiert werden sollen. die eine, die nicht soll, lässt du einfach weg.

    wenn du das mit phpmyadmin 'getestest' hast, steht dort auch die sql-anweisung, die du für dein script entsprechend anpassen kannst.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      ahh alles klar,

      thx, mit den Kommatas hatte ich schon, nur dass ich dann alle Columes angeben muss war mir nicht klar.

      nochmal thx
      Grüße
      cu LaHood

      Kommentar


      • #4
        Hi Abraxaxx,

        ich glaube du meinst etwas anderes. Wie ich die Werte nur bestimmten Feldern in meiner DB zuweise bekomme ich ja hin, aber nicht bestimmte Felder in der CSV Datei beim Import auszulassen.

        "ADSG.DE",76.55,"2/3/2003","2:05pm",+1.44,75.11,77.32,75.06,243379


        bekomme dann bei folgendem Befehl:

        LOAD DATA LOCAL INFILE 'C:\\WINNT\\php9D.tmp' INTO TABLE `all_aktien` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'(

        `WKN` , `Close` , , , , `Open` , `High` , `Low` , `Volume`
        )


        folgende Fehlermeldung:
        You have an error in your SQL syntax near ' , , `Open` , `High` , `Low` , `Volume` )' at line 1


        Meine Fields im Table der DB sind sind:
        Name,WKN,Date,realDate,Open,High,Close,Volume,Status,Anlagezeit,ID

        Kommentar


        • #5
          ich denke mal das dein feldname Date dir einen strich durch die rechnung macht.

          DATE ist reserviert.

          nimm mal feldnamen, die nicht irgendwie definiert sind... z.b. Datum
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            hmm meinst du das liegt nur an dem speziellen Fall mit dem Namen?
            Denn es gibt noch einen anderen Import in genau dieselbe Tabelle mit Load Data Infile, nur sind da die Daten anders aufgebaut in der CSV und ich muss in der CSV nichts auslassen.

            Ich teste es trotzdem mal kurz

            Kommentar


            • #7
              grundsätzlich rate ich immer, dass man keine spaltennamen verwendet, deren 'name' bereits ein reserviertes wort ist.

              das macht nur probleme

              man kann es zwar durch die ` eingrenzen/markieren, aber sauber finde ich das nicht.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                nee bringt nix, habs geändert das Problem ist immer noch da.

                Kommentar


                • #9
                  sind die felder auch korrekt definiert?
                  z.b. 2/3/2003 passt mit sicherheit nur in VARCHAR aber nicht in DATE.

                  stimmt die anzahl der felder? usw.

                  ausserdem....
                  was ist das? (rote markierung)

                  ... Close` [color=red], , , ,[/color] `Open ...

                  EDIT:
                  hast du hier DREI felder ausgelassen?
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Genau,

                    ich habe 3 Felder ausgelassen, weil ich diese Felder aus der CSV Datei nicht haben möchte.

                    Hier nochmal die Werte der CSV Datei:

                    Feld 1||||||,Feld2 ,Feld3|||||||,Feld4|||||,Feld5 ,Feld6,Feld7 ,Feld8,Feld9
                    --------------------------------------------------------------------------------------------
                    "ADSG.DE",76.55,"2/3/2003","2:05pm",+1.44,75.11,77.32,75.06,243379
                    --------------------------------------------------------------------------------------------
                    WKN|||||||,Close,|||||||||||||||,|||||||||||,||||||||,Open,High||,Low||,Volume

                    Zuordnung der Fields in MYSQl

                    Ich möchte nur Feld 1 + Feld 2 + Feld 6 + Feld 7 + Feld 8 + Feld 9 aus der CSV Datei importieren.
                    Zuletzt geändert von LaHood; 04.02.2003, 08:12.

                    Kommentar


                    • #11
                      poste mal einen ausschnitt der datei aber bitte 1:1
                      und poste mal bitte die tabellenstruktur.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        also,

                        der Inhalt der CSV Datei sieht folgendermassen aus:
                        (Anm. Ist nur eine Zeile)

                        ADSG.DE,74.58,"2/4/2003","2:05pm",-1.97,76.26,77.18,73.20,262750

                        Die Fields in dem Table sind in der dargestellten Reihenfolge folgende:

                        Name (varchar(40))
                        WKN (varchar(15))
                        Date (varchar(20))
                        realDate (date)
                        Open (float)
                        High (float)
                        Low (float)
                        Close (float)
                        Volume (int (15))
                        Status (varchar(20))
                        Anlagezeit (timestamp(14))
                        ID (int(15))

                        Zugewiesen werden soll nur folgenden Fields:
                        WKN (varchar(15)) -> ADSG.DE (CSV 1. Wert)
                        Open (float) -> 76.26 (CSV 6. Wert)
                        High (float) -> 77.18 (CSV 7. Wert)
                        Low (float) -> 73.20 (CSV 8. Wert)
                        Close (float) -> 74.58 (CSV 2. Wert)
                        Volume (int (15)) -> 262750 (CSV 9. Wert)


                        Grüße
                        cu LaHood

                        Kommentar


                        • #13
                          poste mal bitte die struktur komplett ... ich will das hier mal testen. also den export aus phpmyadmin meine ich ...
                          kannst du mir auch mehr als eine zeile der datei posten?

                          was du aber vorher noch testen kannst....

                          im moment hast du nur um datum und uhrzeit die feldbegrenzung " drin. mache das auch mal bei den anderen feldern rein.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            die struktur von der database?

                            # Tabellenstruktur für Tabelle `all_aktien`
                            #

                            CREATE TABLE all_aktien (
                            Name varchar(40) default NULL,
                            WKN varchar(15) default NULL,
                            Date varchar(20) default NULL,
                            realDate date default '0000-00-00',
                            Open float default NULL,
                            High float default NULL,
                            Low float default NULL,
                            Close float default NULL,
                            Volume int(15) default NULL,
                            Status varchar(20) default 'default',
                            Anlagezeit timestamp(14) NOT NULL,
                            ID int(15) NOT NULL auto_increment,
                            PRIMARY KEY (ID),
                            KEY ID (ID),
                            KEY Name (Name),
                            KEY WKN (WKN),
                            KEY Date (Date),
                            KEY Open (Open),
                            KEY High (High),
                            KEY Low (Low),
                            KEY Close (Close),
                            KEY Volume (Volume),
                            KEY realDate (realDate)
                            ) TYPE=MyISAM;

                            Die Feldbegrenzung ist bei allen Werten die Buchstaben und Sonderzeichen enthalten. Ich kann das nicht ändern da ich die Datei zur Verfügung gestellt bekomme.
                            Ich kann nur eine Zeile posten, da in dieser CSV Datei nur eine Zeile drin ist.
                            Ich kann dir eine URL posten wo du so eine CSV Datei herbekommst.

                            Link CSV Datei

                            Kommentar


                            • #15
                              danke. das war genau das, wass ich haben wollte ...


                              ich habe jetzt mal ein wenig gespielt. was ich rausgefunden habe.
                              man MUSS alle felder berücksichtigen, die eine lücke bilden. also
                              die spalten 3-5 MUSST du übernehmen, wenn du spalte 6 haben willst.
                              da es nur die 3 spalten sind, die du nicht haben willst, müsstest
                              du die csv.datei umstellen, was wohl schwierig ist oder aber
                              du legst noch drei felder in der db an. das habe ich mal gemacht.
                              alle felder sind varchar(1) und auch mit NULL belegbar. nach einem
                              import kannst du die drei felder also auch alle wieder NULL setzen.

                              hier mal die neue struktur.
                              Code:
                              CREATE TABLE all_aktien (
                                Name varchar(40) default NULL,
                                WKN varchar(15) default NULL,
                                Date varchar(20) default NULL,
                                realDate date default '0000-00-00',
                                OPEN float default NULL,
                                High float default NULL,
                                Low float default NULL,
                                Close float default NULL,
                                Volume int(15) default NULL,
                                STATUS varchar(20) default 'default',
                                Anlagezeit timestamp(14) NOT NULL,
                                ID int(15) NOT NULL auto_increment,
                                Trash1 char(1) default NULL,
                                Trash2 char(1) default NULL,
                                Trash3 char(1) default NULL,
                                PRIMARY KEY  (ID),
                                KEY ID (ID),
                                KEY Name (Name),
                                KEY WKN (WKN),
                                KEY Date (Date),
                                KEY OPEN (OPEN),
                                KEY High (High),
                                KEY Low (Low),
                                KEY Close (Close),
                                KEY Volume (Volume),
                                KEY realDate (realDate)
                              ) TYPE=MyISAM;
                              dann müssen die feldnamen entsprechend so angegeben werden, wie die reihenfolge
                              in der csv ist. sonst kann mysql das ja nicht zuordnen

                              diese query kam bei meinem phpmyadmin raus... klappt super.
                              dateinamen musst du entsprechend anpassen.

                              Code:
                              LOAD DATA LOCAL INFILE '/tmp/phpsvOZk3' INTO TABLE `all_aktien` FIELDS TERMINATED BY ','
                              ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'(
                              `WKN` , `Close` , `Trash1` , `Trash2` , `Trash3` , `Open` , `High` , `Low` , `Volume` 
                              )
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X