Abgleich Datenbank mit CVS Datei

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

  • Abgleich Datenbank mit CVS Datei

    Hallo,

    ich habe ein kleines Problem. Ich habe eine *cvs Datei und eine Datenbank die ich über einen Wert vergleichen will. Nun mache ich das im Moment mit einer for Schleife was nicht die Perfecte Lösung des Problems ist, da es einfach ewig dauert.

    Ich selektiere mir alle Daten aus der CVS Datei mir fopen (4999 Datensätze)

    nun vergleiche ich diese mit den Datenbankfeldern. Einmal ein beispielCode

    Ich brauche alle Datensätze DIE nicht in der Datenbank stehen!

    PHP-Code:
    echo count($_CSV['BuergelID']) . " - " count($_SQL['BuergelID']) ."<br>";
    for(
    $i 0$i<count($_CSV['BuergelID']);$i++){
        echo 
    "forschleife 1 <br>";
        for(
    $z 0;$z count($_SQL['BuergelID']);$z++){
            echo 
    "forschleife 2 <br>";
            if(
    $_CSV['BuergelID'][$i] == $_SQL['BuergelID'][$z]){
                echo 
    "identischen Datensatz gefunden, wird gelöscht" $_CSV['Name'][$i] . "<br>";
            }
        }

    Das dauert natürlich, in der DB sind ca. 3800 Datensätze, in der CSV so um die 5000.

    Jemand einen hilfreichen Tip für mich?

    Danke und Gruß
    Jan
    Zuletzt geändert von Skrok; 10.04.2008, 10:30.

  • #2
    Lies die CSV-Datei mit [i]LOAD DATA[i] in eine temoräre Datei und vergleiche dann diese mit der ursprünglichen Tabelle.
    Gruss
    H2O

    Kommentar


    • #3
      hehe du meinst bestimmt nicht in eine Datei sondern in eine Tabelle... gut, mach ich mal, müsste dementsprechend ja schneller gehen. Kann ich denn 2 Tabellen auf einheitliche Datensätze vergleichen?

      Kommentar


      • #4
        Kann ich denn 2 Tabellen auf einheitliche Datensätze vergleichen?
        Klar, deshalb hat dir H2O ja den Hinweis gegeben.

        Beispiel:

        PHP-Code:
        SELECT count(*) 
        FROM    TabATabB 
        WHERE TabA
        .spalte1 TabB.spalte1 
        AND      TabA.spalte2 TabB.spalte2 
        AND      TabA.spalte3 TabB.spalte3 
        Musst dann halt einfach die Counts miteinander vergleichen. Gibt aber noch ein paar weitere Möglichkeiten.

        mfg
        bugbuster
        tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
        documentation: php.net mysql.com framework.zend.com

        Die Nachtwache!

        Kommentar


        • #5
          Falls in beiden Tabellen (natürlich meinte ich Tabelle) die PRIMARY KEYs identisch sind, kannst du die erste Tabelle auch gleich mit REPLACE oder mit INSERT ... ON DUPLIKATE UPDATE aktualisieren
          Gruss
          H2O

          Kommentar


          • #6
            Na so einfach ist das nicht, ich muss die Daten danach noch verschieben, verknüpfen und kopieren (das DB Design habe nicht ich entworfen, bin aber dazu gezwungen dort keine Änderungen vorzunehmen).

            Code:
             -> tabelle a
               
                 BuergelID    ID    Name
                 014711        1     Test Firma
                 152514        2     Test Firma 2
                 014785        3     Test Firma 5
                 147125        4     TestFirma 7
              
            -> tabelle b
                 
                 ID         IdAddress   
                 4052       014711 
                 1458       152514
                 4748       014785
                 5894       147125
              
            -> tabelle c
            
                 BuergelID   Name
                 152521      Hans Mayer
                 858252      Peter Friedrich
                 014785      Wolfgang Wolkens
            So,

            Tabelle B enthält Daten zur Tickets die über die IdAddress mit der Id aus Tabelle A verknüpft werden.

            So, ich muss nun mit einem JOIN Tabelle a+b zusammenführen, um die BuergelID rauszubekommen. Nun muss ich Prüfen, welche BuergelID in Tabelle B noch NICHT angesprochen wurde.

            Ähm ich hoffe ich hab mit verständlich ausgedrückt.

            Wahrscheinlich bin ich auch einfach nur zu doof :P

            Kommentar


            • #7
              die über die IdAddress mit der Id aus Tabelle A verknüpft werden.
              Ahja, und wie bitte machst du das? oder ist iDAddress = tabelleA.id ?

              mfg
              bugbuster
              tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
              documentation: php.net mysql.com framework.zend.com

              Die Nachtwache!

              Kommentar


              • #8
                Jau

                A.Id = B.IdAddress

                Kommentar


                • #9
                  Aber ich könnte mir ja ein VIEW für die Join Abfrage basteln und dann mit

                  SQLSTATEMENT + WHERE NOT EXISTS (SELECT * FROM View) mal basteln ...

                  Kommentar


                  • #10
                    Geht natürlich nicht :P

                    Meldung 4506, Ebene 16, Status 1, Prozedur V_ImportTemp, Zeile 14
                    Spaltennamen müssen in jeder Sicht oder Funktion eindeutig sein. Der Spaltenname 'Id' in der Sicht oder Funktion 'V_ImportTemp' wurde mehrmals angegeben.

                    Update:

                    Geht natürlich doch ...

                    Kommentar


                    • #11
                      Original geschrieben von SkrokTabelle B enthält Daten zur Tickets die über die IdAddress mit der Id aus Tabelle A verknüpft werden
                      Das glaube ich schon mal nicht. Wahrscheinlich wird über BuergelID verknüpft
                      Original geschrieben von Skrok
                      Ähm ich hoffe ich hab mit verständlich ausgedrückt.
                      Ich verstehe weiniger als zuvor. Was willst du jetzt aus welcher Tabelle wo einfügen? Und wie sieht diese View aus?

                      Ich sagte ja immer, man soll nicht SELECT * FROM benutzen, dann gibts auch wenige mehrfach belegte Attributnamen.
                      Gruss
                      H2O

                      Kommentar


                      • #12
                        Original geschrieben von H2O
                        Das glaube ich schon mal nicht. Wahrscheinlich wird über BuergelID verknüpft
                        Ich verstehe weiniger als zuvor. Was willst du jetzt aus welcher Tabelle wo einfügen? Und wie sieht diese View aus?

                        Ich sagte ja immer, man soll nicht SELECT * FROM benutzen, dann gibts auch wenige mehrfach belegte Attributnamen.
                        Nein, es wird nicht über die BürgelID verknüft, das kann ich dir mit 200% Sicherheit sagen :P

                        a.id = b.idaddress^^
                        Zuletzt geändert von Skrok; 10.04.2008, 14:25.

                        Kommentar


                        • #13
                          Als Lösung hier mal der SQL Code

                          PHP-Code:

                          SELECT DISTINCT BuergelID
                          ,Name FROM [FranzenAG-VIP2].[dbo].[ImportTemp] AS 
                            WHERE NOT EXISTS 
                          SELECT BuergelID FROM [FranzenAG-VIP2].[dbo].[V_ImportTemp] AS B
                                               WHERE B
                          .BuergelID A.BuergelIDORDER BY Name 

                          Kommentar

                          Lädt...
                          X