Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten trennen und dann in neue Tabelle einfügen

Einklappen

Neue Werbung 2019

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

  • Daten trennen und dann in neue Tabelle einfügen

    Hallo, ich habe wirklich schon gesucht, aber entweder falsch oder noch nichts passendes gefunden.

    Also, das script was ich mir irgendwie zusammengebastelt habe erledigt genau das, was es soll.
    die Frage ist nun: geht das auch schneller/performanter?

    Es geht darum:
    Tabelle 1 Feld mit Werten durch ; getrennt.
    Dieses Feld lese ich nun aus und trenne die Werte.
    Nun möchte ich die getrennten Werte in eine andere Tabelle einfügen.

    Ich bin mir sicher, ich hatte vor Jahren als ich mal etwas mehr mit php gemacht habe eine Lösung für, aber ich komme nicht drauf.

    Also mache ich momentan im
    while($row = mysql_fetch_object($ergebnis)) wirklich für jeden getrennten wert ein eigenes insert Statement.

    der Code sieht also nun so aus:

    PHP-Code:
    <?
    $abfrage = "SELECT ean, $feldname1 FROM tabelle";
    $ergebnis = mysql_query($abfrage);

    while($row = mysql_fetch_object($ergebnis))
     {
       $teile = $row->$feldname1; $teile1 = explode(";", $teile);
      
        for($i=0; $i < count($teile1); $i++) // Eine schleife wird so oft ausgeführt wie das Array Inhalte hat
        {
        if( $teile1[0] == '') {} 
            else 
            {
            $value_data = trim($teile1[$i]);
            $eintrag = "INSERT INTO attribut (ean, data_key, data_value, quelle, data_key_name) VALUES ('$row->ean', '$data_key', '$value_data','$quelle','$data_key_name');";
            $eintragen = mysql_query($eintrag);
            }
        }
     }
       ?>

  • #2
    Man kann mit einem INSERT-Statement auch mehrere Datensätze einfügen.

    PHP-Code:
    INSERT INTO `test` (`foo`, `bar`) VALUES ('test''bla'), ('test''bla2').... 
    Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

    Kommentar


    • #3
      Hallo Geormel,

      danke dir.
      Aber wie passt das mit meinem Konstrukt zusammen?
      Ich muss ja vorher auch noch abfragen, ob in dem Teil des Arrays etwas drin ist, da ich vorher nicht weiß, wieviele Werte mit ; in dem Feld stehen

      und habe für jeden Wert aus dem Array ja eine neue "Zeile" durch die for Schleife!?

      Kommentar


      • #4
        Bau dir dein Statement doch in der Schleife zusammen und führ es erst danach aus? Stringverkettung, bzw. ein Array o.Ä. So schwer ist das nicht.
        Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

        Kommentar


        • #5
          danke dir, das versuche ich gerade.
          "so schwer ist das nicht" liegt immer im Auge des Betrachters.

          Kommentar


          • #6
            und wenn du grade dabei bist, steig auf mysqli oder pdo um. Die mysqli_-Erweiterung ist mit PHP 5.5 schon deprecated und wird bald ganz rausfliegen.
            Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

            Kommentar


            • #7
              ja, danke für den Hinweis, das habe ich eben gelesen.
              da verstehe ich aber den Wald vor lauter Bäumen nicht mehr.

              ich teste ja auch nur mit den Daten hier Lokal auf nem Rechner mit xampp.

              Kommentar


              • #8
                Ich schubs dich mal mit ein paar kleinen Änderungen...
                PHP-Code:
                while($row mysql_fetch_object($ergebnis)) 
                 { 
                   
                $teile $row->$feldname1$teile1 explode(";"$teile); 
                   
                // hier sammeln wir unsere Daten
                   
                $insertBuffer = array(); 
                   
                // eine bessere Schleife um Arrays zu durchlaufen, ist foreach.. das Array kann Lücken im numerischen Index aufweisen
                   // for($i=0; $i < count($teile1); $i++) // Eine schleife wird so oft ausgeführt wie das Array Inhalte hat 
                   
                foreach ($teile1 as $i => $teil)
                    { 
                    
                // kein if-else nötig, wenn man es richtig abfragt
                    
                if (!empty($teil))
                        { 
                        
                $value_data trim($teil); 
                        
                //$eintrag = "INSERT INTO attribut (ean, data_key, data_value, quelle, data_key_name) VALUES ('$row->ean', '$data_key', '$value_data','$quelle','$data_key_name');"; 
                        //$eintragen = mysql_query($eintrag); 
                        // nicht gleich eintragen, erstmal erneut sammeln. Dabei gleich ein Format benutzen, was uns später nützt
                        // dies sind die Spalten: (ean, data_key, data_value, quelle, data_key_name)
                        
                $insertBuffer[] = sprintf("('%s', '%s', '%s','%s','%s')",
                                                    
                $row->ean
                                                    
                $data_key
                                                    
                $value_data
                                                    
                $quelle
                                                    
                $data_key_name);
                        } 
                    }
                    
                // Ab hier darfst du dann selber ran. 
                    // Der $insertBuffer enthält eine Reihe von Strings, die in ein SQL verpackt werden, wie es im Thread bereits gesagt wurde. hint: implode()
                    
                 

                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar

                Lädt...
                X