Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrere MySQL Tabellen zusammenführen

Einklappen

Neue Werbung 2019

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

  • Mehrere MySQL Tabellen zusammenführen

    Hi,

    ich stehe vor einem größerem Problem und zwar habe ich 3 csv dateien mit Datenbanken zugeschickt bekommen. Diese sollen alle in eine Tabelle zusaammen gefasst werden.
    In der 1. stehen ID, Name... (22.500 Datensätze)
    In der 2. stehen ID und email (20.000 Datensätze)
    In der 3. stehen ID, anschrift, kontodaten... (10.500 Datensätze)

    Bis jetzt habe ich alle 3 csv dateien so aufbereitet dass ich jede in eine einzelne Tabelle hochladen konnte. Diese müssen nun zusammgeführt werden so dass am ende eine tabelle mit ID, Name, Email, Anschrift, Kontodaten vorhanden ist.

    Ich hab es nun auch schon mit Schleifen versucht, allerdings dauert das natürlich ewig, gibt es eine einfachere Lösung?

    Hier mein Code was ich bis jetzt habe, der auch funktioniert nur eine zu hohe Laufzeit hat.

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);        //0 = public mode, E_ALL = development-mode
    require_once    ('_mysql.php');
    require_once    (
    '_config.inc.php');

            
    $db                 =     connect_mysql_db($host$mysql_database$user$pass);
            
    $sql                =    "SELECT * FROM tabelle1";
            
    $daten                =    array (
                                        
    'id'        =>    ''
                                    
    );
            
            
    $abfrage            =    read_mysql_db($db$sql$daten);
            
    $anzahl             =     count($abfrage); 
            
            
    $sql2                =    "SELECT * FROM tabelle2";
            
    $abfrage2            =    read_mysql_db($db$sql2$daten);
            
    $anzahl2             =     count($abfrage2); 
            


            for (
    $i 0$i $anzahl; ++$i){
                foreach(
    $abfrage2 as $key => $values){
                    foreach(
    $values as $key2 => $values2){
                        if(
    in_array($abfrage[$i]['id'], $values)){
                            
    $datenpush = array(
                                
    'email' =>     trim($values2),
                                
    'id'    =>    $abfrage[$i]['id']);
                            
    $sql3 "UPDATE kb SET email = :email WHERE id = :id";
                            
    write_mysql_db($db$sql3$datenpush);     
                        }
                    }
                }
            }
    ?>
    Bin für jede Hilfe dankbar.

    Gruß Micha

  • #2
    Was heißt zu hohe Laufzeit?
    Da es eine einmalige Angelegenheit sein dürfte, ist es doch egal, ob das Script nun 2 oder 3 Minuten läuft...

    Kommentar


    • #3
      Wenn du die CSV-Dateien auf deinem Datenbankserver ablegen kannst, nimm das hier:
      http://dev.mysql.com/doc/refman/5.1/de/load-data.html

      Kommentar


      • #4
        Das script läuft bei der zusammenfassung von tabelle 1 und 2 schon 15min und schafft dabei nur 20% der Daten.
        Tabelle 3 hat ingesamt 57 felder, ich will nicht wissen wie lange dass dann läuft.

        Gruß Micha

        Kommentar


        • #5
          Ich würde die Tabelle mit PMA anlegen, dann per PHP-Script die erste CSV seriell abarbeiten und die Zeilen mit INSERT INTO erstellen. Danach die restlichen CSV-Dateien seriell abarbeiten und die Spalten per UPDATE / WHERE id = $id ergänzen.


          PHP-Code:

          <?php
          set_time_limit
          (0);

          $filename_in 'daten1.csv';

          $fp fopen$filename_in"r" );
          while (
          $teile fgetcsv($fp2048,";")) {

            
          $id $teile[0];
            
          // usw.

            
          $sql "INSERT INTO...";
            
          mysql_query($sql);
          }

          Kommentar


          • #6
            Mit LOAD-DATA wird die Verarbeitung aber um den Faktor 10-100 schneller sein. Im übrigen: 57 Felder erscheint mir reichlich viel, evtl. aufdröseln.

            Kommentar


            • #7
              Ich danke für die Hilfe und versuch es gleich mal umzusetzen. Unser Abrechnungssystem will leider jeden Partner in einer Zeile haben, daher muss ich die Daten so aufbereiten.

              Wünsche allen Frohe Weihnachten.


              Gruß

              Kommentar


              • #8
                Man munkelt es gäbe VIEWs, die deine Daten beliebig transformieren können. Ob sich das lohnt musst natürlich du wissen.

                Kommentar

                Lädt...
                X