sql letzten 5 + limit

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

  • sql letzten 5 + limit

    hey zusammen. ich möchte auf meiner präsentz "community" meinen besuchern die möglichkeit bieten die letzten 5 profilbesucher anzeigen zu lassen. das ist auch kein problem in dem ich in der abfrage einfach ein limit von 5 setze. jedoch ist das so, das die besucher in der id inkrementiert werden was die datenbank auf dauer mit überflüssigem müll überfüllt.
    wie kann ich die tabelle einstellen, das auch nur 5 datensätze gespeichert werden und er automatisch immer die alten übeschreibt ?

    danke schonmal im vorraus und für eure denkanstöße

  • #2
    das die besucher in der id inkrementiert werden was die datenbank auf dauer mit überflüssigem müll überfüllt.
    Beschreibe dies mal genauer!

    Ansonsten gilt ... Nutze "... ORDER BY ... DESC LIMIT 5", um die letzen 5 Einträge zu erhalten.

    Das "Problem" der alten Datensätze kannst du mit einem Cron lösen, der alles, was älter als x Tage ist, entfernen kann.
    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
      einfügen muss so aussehen
      1)delete from tabelle where id=1 or id>5;
      2)update tabelle set id=id-1;
      3)insert into tabelle(id,.......) values(5,.......);

      jetzt kannst du bei select auf limit verzichten
      Slava
      bituniverse.com

      Kommentar


      • #4
        Einfach etwas vor der Aufbereitung der Anzeige ablaufen lassen.

        SELECT count( * ) AS total, max( id ) AS max
        FROM tabelle

        Das Ergebnis prüfen ob total > 5 ist, wenn ja

        delete from tabelle where id < #wert von max -5

        Kommentar


        • #5
          hey, danke schonmal für eure antworten.
          also das von abraxas ist ja das simpelste, das hab ich so auch zuerst gemacht gehabt.
          genauer beschrieben-> weiter unten
          und cron.oha..hab noch nie mit cron gearbeitet. aber das ganze mit cron zu realisieren..hm..geht das auch ohne cronjob?

          das von slava ist ja übrehaupt nicht anwendbar. das würde ja den quellcode sprengen und die datenbank übelst belasten wenn ich das nach diesem verfahren mache. updaten,löschen,lesen und das immer wieder :/

          das von piratos kommt mir bisher am besten vor, wobei ich gerade den code nicht ganz verstehe..

          SELECT count( * ) AS total, max( id ) AS max
          FROM tabelle

          zähle alles aus der datenbank zusammen als ein einziges ergebnis,
          und was soll das mit max id ?!?!?!? zähle maximal 5 id´s oder wie?
          is ja dann das gleiche wie punkt 1 so ungefähr.

          die id ist doch fortlaufend da sie inkrementiert werden..

          geht das nicht auf diese art und weise?

          geb mir die letzten 5 id´s (also nach dem verfahren von abraxas)
          und lösche alle restlichen id´s.
          aber da ist das problem mit dem altersunterschied, da ja max (5 besucher) wiedergegeben werden solllen. id 5 müsste dann z.b auf id 4 runter rutschen.damit id 5 den neuen wert des neuen besuchers erhält.

          oder denk ich da komplett falsch?
          Zuletzt geändert von activexactive; 05.08.2009, 10:01.

          Kommentar


          • #6
            das von piratos kommt mir bisher am besten vor, wobei ich gerade den code nicht ganz verstehe..

            SELECT count( * ) AS total, max( id ) AS max
            FROM tabelle
            mit count(*) AS total wird die Anzahl der vorhandenen Datensätze gezählt

            Mit max(id) AS max wird der letzte Autoincrementwert der id (id kann bei dir auch ein anderer Feldname sein) ermittelt, liegt in max vor.

            Wenn also total > 5 ist dann lösche ansonsten ja nicht nötig.

            Legt man eine solche Routine in den Scriptteil wo das Profil aufgerufen wird, reduziert der jeweilige Besucher die Tabelle automatisch - cron job ? Wofür ?

            Kommentar


            • #7
              Zitat von activexactive Beitrag anzeigen
              geb mir die letzten 5 id´s (also nach dem verfahren von abraxas)
              und lösche alle restlichen id´s.
              Man schreibt mich mit "x" am Ende.

              Ich meinte nicht, dass du immer alle anderen Ids direkt löscht. Du wirst doch einen Eintrag in der Datenbank haben, der den Besuch des Users als Zeitwert speichert.

              Anhand diesen Zeitwertes löschst du alles was älter als x Tage ist.

              Du musst dich nicht auf exakt 5 Einträge fixieren. Was ist, wenn der User ganz neu ist, und sowieso keine 5 Einträge gezeigt werden können?
              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


              • #8
                Was ist, wenn der User ganz neu ist, und sowieso keine 5 Einträge gezeigt werden können?
                mit count(*) AS total wird die Anzahl der vorhandenen Datensätze gezählt

                Mit max(id) AS max wird der letzte Autoincrementwert der id (id kann bei dir auch ein anderer Feldname sein) ermittelt, liegt in max vor.

                Wenn also total > 5 ist dann lösche ansonsten ja nicht nötig.
                Ich selbst würde mir übrigens den Aufwand nicht machen.

                Die angebliche Belastung von Mysql ist derart minimal das man normal nicht darüber reden müsste.

                Kommentar


                • #9
                  ok, danke piratos..

                  okay abraxax

                  nun ja, ich habe allerdings einen zeitstempel.
                  stimmt..an den zeitstempel hab ich noch garnicht gedacht. ist allerdings eine art das so umzusetzen. das problem nur daran ist. hat ein profil 5 besucher gehabt und wurde zwischenzeitlich 2 wochen lang nicht besucht dann löscht er ja praktisch den gewählten zeitraum von sagen wir mal ca 2 tage..daher..alle einträge sind dann wech...

                  und.. wenn der user halt noch keine besucher hatte, hatte er eben noch keine..dann wird einfach gesagt "keine besucher" oder garnix anzeigen lassen.---werbung---

                  ich werd mich mal an die version von piratos versuchen. mal sehen ob ich damit erfolg hab.

                  falls ich scheitere meld ich mich noch mal oder ich benutzt diese variante.

                  ich lege 5 datensätze fest ohne das diese inkrementiert werden und lass die idßs eben nach unten rutschen.. keine ahnung..ist auch nicht sehr elegant die lösung..kann doch ned so schwer sein *lach

                  Kommentar


                  • #10
                    Zitat von activexactive Beitrag anzeigen
                    ... das problem nur daran ist. hat ein profil 5 besucher gehabt und wurde zwischenzeitlich 2 wochen lang nicht besucht dann löscht er ja praktisch den gewählten zeitraum von sagen wir mal ca 2 tage..daher..alle einträge sind dann wech...
                    Nach wieviel Tagen Inaktivität eines Users wird dieser aus der DB entfernt/gesperrt/angeschrieben? Nimm diesen Wert auch zum Löschen.
                    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


                    • #11
                      wird garnicht gelöscht. ich verwende die time funktion nur um anzuzeigen wann der profilbesucher das profil zuletzt aufgerufen hat. ich will das aber auch nicht unbedingt zeitabhängig machen.

                      profile werden auch nicht gesperrt und angeschrieben. diese funktion habe ich mir noch nicht geschrieben.

                      Kommentar

                      Lädt...
                      X