Daten mit einer Schleife löschen

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

  • Daten mit einer Schleife löschen

    Ich komme irgendwie nicht weiter.
    Der Code:
    PHP-Code:
      $sql="SELECT sid,time FROM seiten";
    $ergebnis=mysql_query($sql);

    if(
    $ergebnis) {
    while(
    $zeile =mysql_fetch_array($ergebnis)) {
    $sid=$zeile["sid"];
    $times=$zeile["time"];
    $data=array($sid);

    $aktuell=time();
    $retour '2592000';
    $time $aktuell $retour;


    while (
    $times $time) {
    $sql ="DELETE FROM seiten WHERE sid= $data[0]";
    $ergebnis=mysql_query($sql);
    $times++;

    }
    }

    Das sind 300 Datensätze, die betroffen sidn, aber er hängt sich immer auf.
    Finde aber den Fehler nicht

  • #2
    Hi,

    du konntest die query auf fehler suchen:

    PHP-Code:
    $result mysql_query('euer SQL'
      or die(
    mysql_error().'<hr />'.'euer SQL'.'<hr />'); 
    und dann dein array überprüfen mit print_r($zeile);
    In Flames - Pinbal Map
    Becoming the Archetype - No Fall Too Far
    Pantera

    Kommentar


    • #3
      Die query funktioniert, und bei der Ausgabe kommen auch die zu löschenden in das Array.
      Was nicht geht ist die while Schleife.

      Kommentar


      • #4
        warum machst du das so umständlich?

        PHP-Code:
        DELETE FROM tabelle WHERE spalte vergleichswert 
        ^^ reicht doch vollkommen

        oder brauchst du die selektierten daten noch woanders?
        Kissolino.com

        Kommentar


        • #5
          so wird nur eine gelöscht:

          PHP-Code:
          $sql ="DELETE FROM seiten WHERE sid= $data[0]"
          nutze lieber eine for schleife...

          PHP-Code:
          for ($i=0$i count($zeile); $i++)
          {
              if(
          $times $time)
             {
                 
          $sql ="DELETE FROM seiten WHERE sid= $data[$i]";
                 
          $ergebnis=mysql_query($sql);
             }

          ---------------------------------------------------------
          die SQL lösung von Würzel ist viel sauberer
          ---------------------------------------------------------
          In Flames - Pinbal Map
          Becoming the Archetype - No Fall Too Far
          Pantera

          Kommentar


          • #6
            Da die Zeilenanzahl höher ist, gibt es mir jetz zuviele Daten doppelt aus.
            Array
            (
            [0] => 134512075
            )

            Array
            (
            [0] => 134512075
            )
            .
            .
            .
            Dann kommt irgentwann der nächste.
            for ($i=0; $i < [COLOR=crimson]count($zeile);[/COLOR] $i++)
            Ansonsten schaut es gut aus

            Kommentar


            • #7
              Habe das jetzt mal so gemacht, aber er versucht immer dann noch den nicht mehr bestehenden Datensatz zu löschen.
              Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

              PHP-Code:
               $sql="SELECT sid,time FROM seiten";
              $ergebnis=mysql_query($sql);

              if(
              $ergebnis) {
              while(
              $zeile =mysql_fetch_array($ergebnis)) {
              $sid=$zeile["sid"];
              $times=$zeile["time"];
              $data=array($sid);

              $aktuell=time();
              $retour '2592000';
              $time $aktuell $retour;

               if(
              $times $time)
                 {
              for (
              $i=0$i count($data); $i++)
              {

                     
              $sql ="DELETE FROM seiten WHERE sid= $data[$i]";
                     
              $ergebnis=mysql_query($sql);

              }
               }
                 }
                   } 

              Kommentar


              • #8
                Original geschrieben von Wurzel
                warum machst du das so umständlich?

                PHP-Code:
                DELETE FROM tabelle WHERE spalte vergleichswert 
                ^^ reicht doch vollkommen

                oder brauchst du die selektierten daten noch woanders?
                Ich kann leider nicht dannach Löschen. Liegt vielleicht daran:
                time | mediumtext | latin1_swedish_ci | Ja | NULL

                Kommentar


                • #9
                  Original geschrieben von ollimagic
                  Liegt vielleicht daran:
                  time | mediumtext | latin1_swedish_ci | Ja | NULL
                  Wie kommst du denn auf die absurde Idee, einen Zeitpunkt in einem Textfeld abzuspeichern?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    wenn du dich für eine SQL Lösung entscheidest...
                    PHP-Code:
                    $retour 30//Tage
                    $sql ="DELETE FROM seiten WHERE TO_DAYS(NOW()) - TO_DAYS(date('Y-m-d',time)) >= $retour";
                    $ergebnis=mysql_query($sql); 
                    vorsicht ungetestet!
                    In Flames - Pinbal Map
                    Becoming the Archetype - No Fall Too Far
                    Pantera

                    Kommentar


                    • #11
                      @wahsaga
                      Die Datenbanken waren schon so angelegt. Da muss ich erstmal reinarbeiten, was da für Typen genommen werden am Besten

                      @pippo
                      Das klappte aber auch nicht
                      Ich brauche auch die sid, um damit gleichzeitig auch noch andere Tabellen zu leeren.
                      Der Fehler kam dadurch das $ergebnis 2 x da war.

                      Kommentar


                      • #12
                        was kriegst du hier als ausgabe?
                        PHP-Code:
                        $sql="SELECT sid,time FROM seiten";
                        $ergebnis=mysql_query($sql) or die(mysql_error());

                        if(
                        $ergebnis
                        {
                            while(
                        $zeile =mysql_fetch_array($ergebnis)) 
                            {
                                
                        $sid=$zeile["sid"];
                                
                        $times=$zeile["time"];
                                
                        //$data=array($sid);

                                
                        $aktuell=time();
                                
                        $retour '2592000'//30 tage
                                
                        $time $aktuell $retour;

                                 if(
                        $times $time)
                                   {
                                       echo 
                        "ausgabe sid die gelöscht wird: ".$sid."<br>";
                                       
                        //$sql ="DELETE FROM seiten WHERE sid = $sid";
                                       //$ergebnis=mysql_query($sql);
                                   
                        }
                            }

                        In Flames - Pinbal Map
                        Becoming the Archetype - No Fall Too Far
                        Pantera

                        Kommentar


                        • #13
                          1. solltest du werte in den dafür vorgesehenen spaltentypen ablegen (dann klappts auch mit dem rechnen)
                          2. queries in schleifen sind böse
                          3. im manual mal WHERE IN anschauen und dann läuft das löschen in 3 zeilen (oder entsprechend mehr je nach zahl der tabellen)

                          - select alle ids wo löschdatum erreicht
                          - fetche die ids in ein array
                          - lösche aus tabelle1 alles wo id in (implodierten array)
                          - lösche aus tabelle2 alles wo id in (implodierten array)
                          - lösche aus tabelle3 alles wo id in (implodierten array)
                          ... etc. pp.
                          Kissolino.com

                          Kommentar

                          Lädt...
                          X