csv mit MySQL vergleichen

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

  • csv mit MySQL vergleichen

    Hi, ich habe folgendes Problem:

    Mit dem untenstehenden Script lese ich aus einer *.csv-Datei Zeile für Zeile aus, und füge diese dann in die Tabelle 'ecdl'.

    Klappt alles wunderbar.

    Mein Problem ist jetzt, dass jeder Datensatz (Zeile) nur einmal in der DB vorhanden sein darf. Das Script soll also, bei jedem durchlauf der while-Schleife, das Array welches die Inhalte der CSV-Datei beinhaltet mit ALLEN Zeilen der Datenbankeinträge vergleichen. Wenn ein Datensatz mit einem aus der DB übereinstimmt, soll dieser übersprungen werden.

    Ich habe es eben mit einer 2. Whileschleife in der aktuellen probiert. Die befindet sich in der unten aufgeführten Schleife. Das "$a"-Array wird bei jedem durchlauf der 2. Schleife mit jeder Zeile in der DB verglichen. Bei übereinstimmung wird es übersprungen, andernfalls eingetragen.

    Das Problem dabei ist nur, dass die 2. Whileschleife nur so oft durchgelaufen wird, solange sich Datensätze in der Tabelle befinden. Und da sich die INSERT INTO Anweisung eben in dieser 2. Schleife befindet, werden auch nur höchstens die Anzahl von Datensätzen eingetragen, die sich in der DB befinden.


    Das ist jetzt das derzeitige Script, ohne die 2. While-Schleife.
    PHP-Code:

    <?
    function add_csv($userfile)
    {
      $fp = fopen($userfile,'r');
      
      while ($a = fgetcsv($fp, 2000, ";")) 
      {
        if(count($a)>=0) 
        {
                $imp_records = array('datum'=>$a[0],'tmp'=>$a[1],'tester'=>$a[2],
    'cardid'=>$a[3],'schueler'=>$a[4],'modul'=>$a[5],'erg'=>$a[6]);
                
                $result = db_query("insert into ecdl
                                       (datum, tmp, tester, cardid, schueler, modul, erg)      
                                        values ('$a[0]','$a[1]','$a[2]','$a[3]','$a[4]',
    '$a[5]','$a[6]')") or db_die();     
        }
      }
    }

    ?>
    Ich hoffe ihr könnt mir helfen, und habt mich auch verstanden. Denn das Script eilt.
    Zuletzt geändert von Gleni; 01.11.2004, 12:42.

  • #2
    ich helf dir, wenn du es schaffst, dass ich nicht mehr horizontal scrollen muss


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

    Kommentar


    • #3
      Re: csv mit MySQL vergleichen

      Original geschrieben von Gleni
      Mein Problem ist jetzt, dass jeder Datensatz (Zeile) nur einmal in der DB vorhanden sein darf.
      warum nutzt du dann nicht UNIQUE?


      Denn das Script eilt.
      auf solche drängeleien verzichte bitte zukünftig.

      sonst werde ich nicht mehr auf kommentare verzichten, dass sich anfänger nicht immer übernehmen sollten ...
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        hmm...UNIQUE bei dem Typ text? Hab es zwar weder Probiert, noch irgendwo gelesen das es nicht geht, aber vorstellen kann ich mir es irgendwie nicht.
        Funktioniert das?

        Wär ich an meinem Rechner würde ich es schnell selber Probieren, aber bin leider nur am Lappi meiner ma.


        byez - sagg
        mfg - sagg

        Kommentar


        • #5
          Re: Re: csv mit MySQL vergleichen

          Original geschrieben von wahsaga
          warum nutzt du dann nicht UNIQUE?
          Habe ich schon versucht. Aber das Problem ist, dass ein neuer Eintrag in die DB schon "Verteilt" vorhanden sein kann.
          Also das Datum ist z.B. 5 mal das gleiche, aber der Name und das Modul ist anders. Und das Modul kann auch 10 mal vorkommen. Nur die Zeile darf nicht in genau der gleichen Kombination vorkommen.

          Das mit UNIQUE habe ich schon versucht. Aber wenn ich wie gesagt ein Feld auf UNIQUE setzten will, sagt er mir geht nicht, es sind schon gleiche Datensätze vorhanden.



          auf solche drängeleien verzichte bitte zukünftig.

          sonst werde ich nicht mehr auf kommentare verzichten, dass sich anfänger nicht immer übernehmen sollten ...
          OK

          Kommentar


          • #6
            Original geschrieben von sagg
            hmm...UNIQUE bei dem Typ text? Hab es zwar weder Probiert, noch irgendwo gelesen das es nicht geht, aber vorstellen kann ich mir es irgendwie nicht.
            Du liest die falschen Texte ... !
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #7
              Da steht ja auch das ich es weder Probiert, noch gelesen habe, sprich es war nur eine Vermutung von mir.

              Aber thx, jetzt weiss ich bescheid.


              byez - sagg
              mfg - sagg

              Kommentar


              • #8
                Re: Re: Re: csv mit MySQL vergleichen

                Original geschrieben von Gleni
                Das mit UNIQUE habe ich schon versucht. Aber wenn ich wie gesagt ein Feld auf UNIQUE setzten will, sagt er mir geht nicht, es sind schon gleiche Datensätze vorhanden.
                dann solltest du vielleicht nicht nur ein einzelnes feld unique machen, sondern über die kombination von spalten, deren wert eindeutig sein soll, einen unique index legen ...
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar

                Lädt...
                X