2 CSV-Dateien --> eine Tabelle

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

  • 2 CSV-Dateien --> eine Tabelle

    Hallo, ich habe mehere CSV-Dateien und möchte diese in eine "große" Tabelle eintragen.
    Geht das oder MUSS ich mehrere Tabellen anlegen?
    Wenn es geht, unter welchem Stichwort muss ich weiter suchen?

    Gruß Stoner

    PS: die CSV-Dateien haben einige gemeinsame Felder und einige unterschiedliche, außerdem sind sie alle in unterschiedlicher Reihenfolge und die Anzahl der Felder variiert.

  • #2
    ?,

    wenn die csvs unterschiedliche strukturen beschreiben, wärs doch dämlich, die in _eine_ table zu packen, oder? ich zumindest pack nicht meine besucherdaten mit denen von gästebuch oder der menustruktur zusammen in eine table.

    wenn sie natürlich sinngemäß zusammengehören und deshalb auch in _einer_ table stehen sollten, kannst du auch 34265,4 dieser csvs in _eine_ table einfügen
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Mein Chef hat mir den Auftrag dazu gegeben. Er möchte alle Daten in einer Tabelle haben "Dann ist alles zusammen".

      Aber wie mache ich das dann? Wie sage ich den CSV-Daten, in welches Feld sie gehören?

      Gruß Stoner

      PS: die Tabelle ist schon vorhanden
      Zuletzt geändert von Stoner; 18.12.2003, 14:02.

      Kommentar


      • #4
        beschreib mal den inhalt, was steht in der einen datei, was in der anderen?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          also, es geht um csv-dateien von affiliate-programmanbietern, die daten dieser csv-dateien beinhalten :
          datum, nummer, sbid, provision, leads, sales und in einigen csvs sind die leads und sales noch genauer aufgedröselt.
          also, vom inhalt passen sie zusammen, aber ....
          in der tabelle sind nun alle felder aufgeführt, wenn ich nun eine der csvs eintragen will, kann es sein, dass sie nur in feld 1, feld5, feld 7 und feld 12 der datenbanktabelle eingetragen werden soll.
          Einzelne scripte, um die csvs in einzelne tabellen einzutragen habe ich schon, aber wie mache ich das, dass die csv nur in diese bestimmten felder eingetragen wird?

          Fruß Stoner

          Kommentar


          • #6
            wenn felder leer sind, sieht eine zeile in der csv datei dann nicht so aus
            Code:
            feld 1;;feld 3;feld4;;;;feld7
            ?

            schau dir auch mal fgetcsv an
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Original geschrieben von mrhappiness
              wenn felder leer sind, sieht eine zeile in der csv datei dann nicht so aus
              wäre ja schlimm, wenn es nicht so wäre.

              somit sollte nur noch
              sind die leads und sales noch genauer aufgedröselt.
              etwas arbeit erfordern.
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                das habe ich mir schon angeschaut.
                also, beispiel:
                csv1 =
                datum; nummer; status; subid; programm; leads/sales; netto; provision;

                csv2 =
                datum; views-anzahl; views-provision; clicks-anzahl; clicks-provision; leads-anzahl; leads-provision; sales-anzahl; sales-provision; provision;

                csv3 =
                programm_id; programmname; datum; provision; status

                ich habe nun eine tabelle entwickelt, die alle felder inne hat, (natürlich keine doppelten) und da hinein möchte ich nun die csvs eintragen

                ich habe es mit
                PHP-Code:
                <?php
                          $db_Hostname
                [0]   = "localhost";                                 
                          
                $db_UserName[0]   = "";                                          
                          
                $db_Password[0]   = "";                                          
                          
                $db_Database[0]   = "abrechnung";                                
                          
                $db_Table[0]      = "partner";                                  
                          
                $db_File[0]       =  "c:/xampp/htdocs/test/beispiel.csv";     
                          
                $db_Terminated[0] = ";";                 

                          
                $select_db 0;
                          if (isset (
                $select_db)) 
                          {
                             
                mysql_connect($db_Hostname[$select_db], $db_UserName[$select_db], $db_Password[$select_db]) || die("Can't Connect to Database: ".mysql_error());
                             
                mysql_select_db($db_Database[$select_db]);
                             
                $del "DELETE FROM ".$db_Table[$select_db];
                             
                $sql "LOAD DATA INFILE '$db_File[$select_db]' REPLACE INTO TABLE ".$db_Table[$select_db].(Datum,Nr,Sts,SubID,Prg,L_S,Netto,Prov_Wert,Prov)"FIELDS TERMINATED BY '$db_Terminated[$select_db]' IGNORE 1 LINES";
                             if (
                mysql_query ($del) and mysql_query ($sql)) 
                             {
                                echo  
                "&Uuml;bertragung erfolgreich";
                              }
                              else 
                              {
                                echo  
                "&Uuml;bertragung fehlgeschlagen. Grund: "mysql_error ();

                              }

                          }
                exit();
                ?>
                versucht, bekomme aber immer die fehlermeldung
                Parse error: parse error, unexpected ',' in C:\xampp\htdocs\test\affilinet2.php on line 44

                ???
                Gruß
                Stoner

                Das ist die Zeile mit dem LOAD DATA

                Kommentar


                • #9
                  haha,

                  das du da nen parse error kriegst, glaub ich ....
                  siehst doch schon am highlighting, oder muß der LOAD DATA wirklich so aussehen?

                  würde vielem widersprechen, was ich über sql weiß ...
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    wenn ich die felder nicht angebe und die csv in eine eigene tabelle schreibe - funktionierts

                    ich denke, dass die felder-angaben an der falschen stelle sind, dabei habe ich sie aus dem mysql-manual

                    Gruß Stoner

                    Kommentar


                    • #11
                      also,

                      ich kenne den befehl nicht, würde aber rein intuitiv
                      PHP-Code:
                      $sql "LOAD DATA INFILE '".$db_File[$select_db]."' REPLACE INTO TABLE ".$db_Table[$select_db]." (Datum,Nr,Sts,SubID,Prg,L_S,Netto,Prov_Wert,Prov) FIELDS TERMINATED BY '".$db_Terminated[$select_db]."' IGNORE 1 LINES"
                      schreiben.

                      aber, wenn ich mal in mein manual schau....

                      6.4.9 LOAD DATA INFILE Syntax
                      Code:
                      LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
                      [REPLACE | IGNORE]
                      INTO TABLE tbl_name
                      [FIELDS
                      [TERMINATED BY '\t']
                      [[OPTIONALLY] ENCLOSED BY '']
                      [ESCAPED BY '\\' ]
                      ]
                      [LINES
                      [STARTING BY '']
                      [TERMINATED BY '\n']
                      ]
                      [IGNORE number LINES]
                      [(col_name,...)]
                      seh ich da keine möglichkeit, die spalten anzugeben ... oder bin ich blind?

                      EDIT:
                      habs
                      If you wish to load only some of a table’s columns, specify a field list:
                      mysql> LOAD DATA INFILE 'persondata.txt'
                      -> INTO TABLE persondata (col1,col2,...);



                      funktioniert die oben angegebene query?
                      Zuletzt geändert von derHund; 18.12.2003, 17:53.
                      Die Zeit hat ihre Kinder längst gefressen

                      Kommentar


                      • #12
                        wenn du ein bisschen weiter nach unten scollst, dann steht da:

                        Wenn Sie Daten nur in einige Tabellenspalten einladen wollen, geben Sie eine Felderliste an:

                        mysql> LOAD DATA INFILE 'personen.txt'
                        INTO TABLE personen (spalte1,spalte2,...);

                        Eine Felderliste müssen Sie ausserdem angeben, wenn die Reihenfolge der Felder in der Eingabedatei von der Reihenfolge der Tabellenspalten abweicht. Ansonsten kann MySQL nicht feststellen, wie er Eingabefelder Tabellenspalten zuordnen soll.
                        es bleibt dann die frage, wo muss die feldangabe hin?

                        Gruß Stoner

                        Kommentar


                        • #13
                          also, wenn ich das nun so schreibe:

                          PHP-Code:
                          $sql $sql "LOAD DATA INFILE '".$db_File[$select_db]."' 
                                                       REPLACE INTO TABLE '"
                          .$db_Table [$select_db]."' (Datum, Nr, Sts, SubID, Prg, L_S, Netto, Prov_Wert, Prov) 
                                                      FIELDS TERMINATED BY '"
                          .$db_Terminated[$select_db]."' 
                                                      IGNORE 1 LINES"

                          dann kommt folgende fehlermeldung:
                          Übertragung fehlgeschlagen. Grund: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''partner' (Datum, Nr, Sts, SubID, Prg, L_S, Netto, Prov_Wert, P

                          Gruß Stoner

                          Kommentar


                          • #14
                            hmm,

                            da paßt wohl was nicht, ich hab keine zwei ' hintereinander geschrieben

                            near ' ' partner ' (Da
                            lass mal die ' ' weg beim table namen
                            Die Zeit hat ihre Kinder längst gefressen

                            Kommentar


                            • #15
                              moin, moin

                              hat bisher alles nix gebracht, hab es nun etwas vereinfacht:

                              PHP-Code:
                              <?
                               mysql_connect("localhost", "", "") or die("Can't Connect to Database: ".mysql_error());
                               mysql_select_db("partner (Datum,Nr,Sts,SubID,Prg,LS,Netto,ProvWert,Prov)");
                               $sql = "LOAD DATA INFILE 'c:/xampp/htdocs/test/beispiel.csv' 
                                        REPLACE INTO TABLE partner(Datum,Nr,Sts,SubID,Prg,LS,Netto,ProvWert,Prov) 
                                       FIELDS TERMINATED BY ';' 
                                       IGNORE 1 LINES";            
                               if (mysql_query ($sql)) 
                               {
                                  echo  "&Uuml;bertragung erfolgreich";
                               }
                               else 
                               {
                               echo  "&Uuml;bertragung fehlgeschlagen. Grund: ". mysql_error ();
                               }
                              exit();
                              ?>
                              meine Fehlermeldung lautet nun:

                              Übertragung fehlgeschlagen. Grund: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY ';' IGNORE 1 LINES' at line 3

                              ich hab als letztes die hochkommas in der Zeile davor weggenommen, die gleiche Fehlermeldung wie oben nur mit der Ausnahme, dass die Zeile vorher als mGrund angegeben worden ist

                              In Verzweiflung
                              Stoner

                              Kommentar

                              Lädt...
                              X