letzte Zeile gleichen Inhalts löschen

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

  • letzte Zeile gleichen Inhalts löschen

    Hi Leute,

    könnte mir jemand vielleicht sagen wie man die letzte Zeile löscht wenn die vorletzte Zeile den gleichen Inhalt hat. Habe leider kein ähnliches Thema im Forum gefunden.
    Dachte dies könnte funktionieren:

    DELETE MAX(id) FROM tabelle WHERE id like id-1 AND ihalt like inhalt

    tut aber nicht.


    Bei der Gelegenheit ein anderes Problem:

    Möchte aus einer Suchanfrage, die ein Ergebnis über $row['antwort']. liefert, das Ergebnis in eine bestimmte Spalte einer anderen Tabelle eingeben. Wie ist das zu schaffen? Habe es über:

    $antwort = $row['antwort'];
    INSERT INTO tabelle (date, antwort) VALUES (NOW(), ' ".$antwort." ')

    versucht. Funktioniert aber auch nicht.

    Gruß
    yaga

  • #2
    zu 1.
    mehr infos wären nicht schlecht....

    zu 2.
    wenn ich das richtig sehe heisst dein 1. feld 'date' . date ist aber ein schlüsselwort. entweder du benennst das feld um, was am sinnvollsten ist, oder du machst backticks drumrum. ein backtick ist das `
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      1.
      bei meinem Projekt handelt es sich um einen „intelligenten“ chat mit einer virtuellen Persönlichkeit, die Personen nach dem login erkennt und begrüßt. Außerdem soll abhängig von der Anzahl der Besuche ein Status erlangt werden. Daran arbeite ich gerade. Die Personen nach dem login werden in eine Tabelle abgelegt. Leider kommt es vor, dass durch den refresh die gleichen Personen mehrmals nach einander in die Tabelle eingetragen werden, was deren Status verfälscht. Die einfachste Möglichkeit dies zu unterbinden wäre meiner Meinung nach die sich wiederholenden Namen am Ende der Tabelle zu löchen.

      2.
      ja, sie spalten sind id, date, antwort und werden nach date sortiert. Datum und Uhrzeit müssen später in der Ausgabe erscheinen. Wie soll die Zeile mit den backticks denn aussehen? / Wird die Ausgabe durch die Umbenennung der Spalte date nicht beeinflusst? Stimmt es sonst so wie ich es habe?

      Kommentar


      • #4
        Original geschrieben von yaga
        Die Personen nach dem login werden in eine Tabelle abgelegt. Leider kommt es vor, dass durch den refresh die gleichen Personen mehrmals nach einander in die Tabelle eingetragen werden, was deren Status verfälscht. Die einfachste Möglichkeit dies zu unterbinden wäre meiner Meinung nach die sich wiederholenden Namen am Ende der Tabelle zu löchen.
        die wirklich einfachste möglichkeit wäre wohl, die spalte auf unique zu setzen - so lässt sich gar nicht erst zweimal der gleiche wert eintragen.

        (allerdings musst du dann den dadurch beim reload auftretenden datenbank-fehler abfangen.)
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          So wie ich es verstehe, bewirkt unique, dass nur einmal der gleiche Wert in diese Spalte geschrieben werden kann. Es ist nicht so gut, da mir diese Tabelle auch Auskunft über die Anzahl der Logins der gliechen Teilnehmer ausgeben soll (Statusangabe). Sie sollen nur nicht mehrmals hintereinander erscheinen.

          Kommentar


          • #6
            zu 1.
            Sie sollen nur nicht mehrmals hintereinander erscheinen.
            dann nimm einfach

            SELECT DISTINCT name FROM ...

            zu 2.
            naja einfach backticks um den spaltennamen....
            PHP-Code:
            $antwort $row['antwort'];
            INSERT INTO tabelle (`date`, antwortVALUES (NOW(), ' ".$antwort." '
            aber das umbenennen ist eleganter und sauberer. du muss nur überall, wo du date in abfragen drin hast, auch dort die änderung machen.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              zu 2:

              funktioniert leider trotzdem nicht. Vielleicht liegt der Fehler weiter oben? Hier der ganze script-Ausschnitt:


              PHP-Code:
              //SUCHE DIE HÄUFIGSTE message IN TABELLE test
              $result3 mysql_query("SELECT COUNT(*) AS anzahl,antwort FROM test GROUP BY antwort ORDER BY anzahl DESC LIMIT 1") OR die(mysql_error());
              while(
              $row mysql_fetch_array($result3)) 
                              
              //GIB DIE ANTWORT AUS                

              echo 
              $row['antwort']."<br>";
              }
                      
              //SCHREIBE DIE ANTWORT IN DIE TABELLE chat
              $x $row['antwort']; 
              $elisa ="Elisa";
              $query "INSERT INTO chat (datum, sender, message) VALUES (NOW(), ' ".$elisa." ', ' ".$x." ')"
              mysql_query ($query) OR die(mysql_error()); 

              Es entsteht zwar keine Fehlermeldung, aber der es erscheint in der Tabelle 'chat' auch kein Eintrag 'antwort'

              EDIT:
              php.tags sponsored by Abraxax
              Zuletzt geändert von Abraxax; 17.06.2003, 16:13.

              Kommentar


              • #8
                zu 2:

                Habe den Fehler gerade selber entdeckt. Es lag an der Klammer {} nach while.

                Danke für die Mühe.


                zu 1:

                Es wäre mir lieber die Zeilen zu löschen, da der refresh, von dem ich gesprochen habe, über javascript alle paar Sekunden einsetzt und die Tabelle mit lauter gleichen Zeilen füllt.

                Kommentar


                • #9
                  also dein code scheint sauber zu sein. gib aber mal das $query mit einem echo aus. stimmt das auch, was da steht?



                  ps. gewöhne es dir direkt mal an, dass du php.tags verwendest, wenn du code postest.

                  EDIT:
                  Habe den Fehler gerade selber entdeckt. Es lag an der Klammer {} nach while.
                  muss ich nicht verstehen. oder? die {} waren doch ok. zumindest hier im post.

                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Ja es läuft alles glatt. Das echo hat eine Antwort aus $query geliefert. Es war aber nur zur überprüfung gedacht.

                    Mit den Klammern meinte ich:
                    'while' gibt die Werte aus der Suchanfrage aus. Um diese Werte in die andere Tabelle zu übergeben, muß die Übergabe dieser Werte ebenfalls in den Klammern stattfinden - while{...$query="INSERT INTO ..."...}. Oder liege ich da falsch? Zumindest läuft es jetzt.


                    Hättest Du noch einen Tip für meine erste Frage? Jetzt bräuchte ich die Lösung sogar noch dringender.
                    Habe es mit dem versucht:

                    PHP-Code:
                    $query "SELECT MAX(id) as last_id FROM login;"
                    $res mysql_query ($query)OR die(mysql_error()); 
                    $row mysql_fetch_array ($res); 
                    $query "SELECT MAX(id)-1 as vor_last_id FROM login;"
                    $res mysql_query ($query)OR die(mysql_error()); 
                    $vor_row mysql_fetch_array ($res); 
                    $query "DELETE FROM login WHERE id ' ".($row['last_id'])." ' like ' ".($vor_row['vor_last_id'])." ' "
                    mysql_query ($query) OR die(mysql_error()); 
                    klappt aber auch nicht.

                    Kommentar


                    • #11
                      vor dem LIKE muss noch was rein.

                      und was genau willst du löschen? immer den vorletzten datensatz?
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Löschen möchte ich die letzte Zeile, wenn diese der vorletzten gleicht.

                        Es geht hier um ein refresh-Problem in einem chat. Ich möchte es vermeiden, dass lauer gleiche Zeilen auftauchen.

                        Habe es damit versucht:

                        PHP-Code:
                        $query_z "SELECT MAX(id) as last_id FROM chat;"
                        $res_z mysql_query ($query_z) OR die(mysql_error()); 
                        //$row_z = mysql_fetch_array ($res_z);

                        while ($row_z mysql_fetch_array($res_z))
                        {
                        $query_y "SELECT MAX(id)-1 as vor_last_id FROM chat;"
                        $res_y mysql_query ($query_y) OR die(mysql_error()); 

                        while (
                        $row_y mysql_fetch_array ($res_y)) 
                        {
                        $query "DELETE FROM chat WHERE '".($row_z['last_id'])."' LIKE '".($row_y['vor_last_id'])."'"
                        mysql_query ($query) OR die(mysql_error()); 
                        }} 
                        Es gibt zwar keine Fehlermeldung mehr, doch funktionieren tut es auch nicht.

                        Kommentar


                        • #13
                          ich weiss zwar nciht wie DU dir das vorstellt, aber das wäre ein ansatz von mir.

                          PHP-Code:
                          $sql "SELECT * FROM chat ORDER BY id DESC LIMIT 2";
                          $res mysql_query($res) or die(mysql_error());
                          $last1 mysql_fetch_assoc($res);
                          $last2 mysql_fetch_assoc($res);

                          if (
                          $last1['eintrag']==$last2['eintrag'])
                          {
                            
                          $sql "DELETE FROM chat WHERE id = ".$last1['id'];
                            
                          $res mysql_query($res) or die(mysql_error());

                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Original geschrieben von yaga
                            So wie ich es verstehe, bewirkt unique, dass nur einmal der gleiche Wert in diese Spalte geschrieben werden kann. Es ist nicht so gut, da mir diese Tabelle auch Auskunft über die Anzahl der Logins der gliechen Teilnehmer ausgeben soll (Statusangabe). Sie sollen nur nicht mehrmals hintereinander erscheinen.
                            sieht nicht gerade so aus, als ob du überhaupt ein halbwegs vernünftiges datenmodell aufgestellt hättest.

                            DISTINCT kann man in den meisten fällen wörtlich mit "das datenmodell ist mist" übersetzen.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Danke Abraxax, der Script sieht viel versprechend aus und müsste funktionieren. Leider hat er noch irgendwo einen Fehler. Den ersten habe ich gefunden. 2. Zeile: mysql_query($sql) statt mysql_query($res), aber wo liegt der zweite? Ich bekomme folgende Fehlermeldung:

                              You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #5' at line 1

                              Kommentar

                              Lädt...
                              X