aus DB löschen

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

  • aus DB löschen

    Hallo zusammen
    Ich habe ein csv in eine Datenbank eingelesen.
    Per on duplicate key update, werden Updates gemacht (im neuen csv wird geschaut, ob sich etwas geändert hat)
    Aber wie kann ich die Daten wieder löschen, wenn sie im neu ankommenden csv fehlen?
    PHP-Code:
    $eintrag "INSERT INTO liste (ID, name, firstname)
    VALUES ('
    $key[1]','$key[7]','$key[8]')
          ON DUPLICATE KEY UPDATE 
    name='" 
    .$key[7]. "',
    firstname='" 
    .$key[8]. "' ";

    $eintragen mysql_query($eintrag);

    Ich möchte schauen ob $key[1] (die ID) noch vorhanden ist, sonst den ganzen Datensatz löschen.
    Kann mir jemand helfen?

  • #2
    Zitat von asterix6 Beitrag anzeigen
    ...
    Per on duplicate key update, werden Updates gemacht (im neuen csv wird geschaut, ob sich etwas geändert hat)
    Aber wie kann ich die Daten wieder löschen, wenn sie im neu ankommenden csv fehlen?...
    Ich möchte schauen ob $key[1] (die ID) noch vorhanden ist, sonst den ganzen Datensatz löschen.
    Kann mir jemand helfen?
    Code:
    DELETE FROM liste WHERE ID=?
    Guckst du ...
    * allgemein: Delete (SQL) - Wikipedia, the free encyclopedia
    * für deinen SQL-Dialekt: MySQL :: MySQL 5.7 Reference Manual :: 13.2.2 DELETE Syntax
    Zuletzt geändert von fireweasel; 09.02.2015, 10:02.
    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

    Kommentar


    • #3
      das kenne ich schon, aber wie muss ich das nun in den beschriebenen Fall reinsetzen?
      Alle Datensätze der IDs, die er nicht findet, sollen gelöscht werden.
      Wie kann ich das elegant in den obigen Code reinbringen? Sieht jemand eine Lösung?
      Vielen Dank!

      Kommentar


      • #4
        Sammle die IDs deiner CSV z.B. in einem Array und baue daraus ein Statement dass wie folgt aussieht:
        Code:
        DELETE FROM ... WHERE ID NOT IN(3,5,6,10,34,...)
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Vielen Dank! Genau sowas brauche ich.
          Aber wie genau kann ich die IDs, die nicht vorhanden sind einfangen?
          Kann mir jemand noch einen genaueren Tipp geben? (Sorry, bin noch Anfänger.)
          Den Delete-Teil ginge dann konkret so:
          PHP-Code:
           DELETE FROM ... WHERE ID NOT IN($IDfehlt
          Aber wie bekomme ich diese IDs in $IDfehlt?
          Vielen Dank für eure Hilfe!
          Zuletzt geändert von asterix6; 09.02.2015, 21:42.

          Kommentar


          • #6
            Du sollst auch nicht die IDs einfangen die nicht vorhanden sind, sondern eben die, die du in deiner CSV hast. Die WHERE-Klausel selektiert dann alle Datensätze in deiner Tabelle, die eben nicht (mehr) in deiner CSV enthalten sind.

            Ich nehme an, dass du deine CSV in einer schleife durchläufst.

            PHP-Code:
            $IDs = array();
            while (
            $keys fgetcsv($fp))
            {
            $IDs[] = $keys[1];

            //dein restlicher Code mit UPDATE usw...

            }

            //und hier löschst du dann wie oben vorgeschlagen 
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Vielen Dank.
              Es funktioniert noch nicht ganz.
              Ich habe nun folgendes:

              PHP-Code:
                 $IDs=array();
                
              $IDs[] = $key[1]; 
                echo 
              implode(","$IDs); 
              Hier bekomme ich nun alle IDs aneinandergehängt: 35747. Ich brauche es aber so: 3,5,7,47
              Damit ich es dann in den DELETE-Query einsetzen kann.
              Kann mir jemand helfen, wie ich das Komma zwischen die IDs bekomme?
              Vielen Dank!

              Kommentar


              • #8
                PHP-Code:
                $ids = array(12345);

                echo 
                implode(','$ids);
                // 1,2,3,4,5 

                Kommentar


                • #9
                  Ja so funktioniert es, wie du das beschrieben hast.
                  Bei mir gibts aber Probleme und ich komme einfach nicht drauf, wie ich das lösen muss:

                  PHP-Code:
                    foreach ($rows as $key) {

                     echo 
                  $key[1] .'<br>';
                     
                  $IDs=array();
                       
                  $IDs[] = $key[1]; 
                       
                        echo 
                  implode(','$IDs) .'<br>';

                  Nun erscheint
                  2
                  2
                  5
                  5
                  7
                  7

                  Wie kann ich das so umwandeln, dass es vom echo implode so erscheint:
                  2,5,7
                  Vielen Dank nochmals!

                  Kommentar


                  • #10
                    Du setzt bei jedem Schleifendurchlauf das Array zurück, wodurch es jedesmal nur ein einziges Element enthält. Dadurch gibt implode() natürlich auch immer nur den einen aktuellen Wert aus.
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      hm, ja. Aber wie kann ich das ändern?
                      Ich habe den key[1] ja erst nach dem foreach...
                      Was wäre der heisse Tipp dazu?

                      Kommentar


                      • #12
                        $ids = array() vor dem Beginn der Schleifen platzieren vielleicht?
                        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                        Schön - etwas Geschichte kann ja nicht schaden.
                        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                        Kommentar


                        • #13
                          aha! Und den implode nach der Schleife!
                          Herzlichen Dank für die superschnelle Hilfe!

                          Kommentar


                          • #14
                            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                            Schön - etwas Geschichte kann ja nicht schaden.
                            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                            Kommentar


                            • #15
                              hm, aber ich habe doch nochmals ein Problem.
                              Ich habe ja nun die Daten so wie ich sie will:
                              PHP-Code:
                              echo implode(','$IDs); 
                              das ergibt 2,5,7
                              Wenn ich im Delete-Befehl das so eingebe funktioniert es:

                              PHP-Code:
                              DELETE FROM list WHERE ID NOT IN(2,5,7)"; 
                              Aber wie bringe ich nun diesen implode-Ausgabe dort hinein?
                              Habe es so versucht:
                              PHP-Code:
                              DELETE FROM list WHERE ID NOT IN($IDs)"; 
                              funktioniert leider nicht.
                              Dann versuchte ich das, um dann $ID anstelle von $IDs einzusetzen.
                              PHP-Code:
                               $IDimplode(','$IDs); 
                              Dann sagt er aber: Array to string conversion

                              Und jetzt??
                              Sorry, bin halt wirklch Anfängerin. Vielen Dank für deine geduldige Hilfe!
                              Zuletzt geändert von asterix6; 11.02.2015, 13:33.

                              Kommentar

                              Lädt...
                              X