Löschfunktion für Punktesystem

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

  • Löschfunktion für Punktesystem

    Ich habe ein Punktesystem mit folgenden Datenbank-Tabellen:

    produktvergleich
    [id]
    [produkt1]
    [produkt2]
    [produkt3]
    [datum]

    produktvergleich_views
    [id]
    [produkt1]
    [produkt2]
    [produkt3]
    [views]

    In Tabelle `produktvergleich` werden die einzelnen Vergleiche mit Datum gespeichert.

    In Tabelle `produktvergleich_views` werden die `views` jeweils um 1 erhöht, wenn ein bereits gespeicherter Produktvergleich erneut aufgerufen wird. Wurde der Vergleich noch nicht aufgerufen, so wird ein neuer Eintrag erstellt.

    Nun müssen alle paar Tage die Views gelöscht werden. Dazu habe ich aus Tabelle `produktvergleich` alle Vergleiche anzeigen lassen, welche älter als 5 Tage sind. Diese Datensätze werden dann mittels einer while-Schleife gelöscht und damit die "views" auch wieder passen, werden diese entsprechend um einen Punkt nach unten korrigiert.

    Nun ist meine Frage: Ist dieses System sinnvoll, oder kann man das Ganze einfacher/besser lösen?

    PS: Anstelle in der Tabelle `produktvergleich_views`nochmals alle drei Produkte zu speichern, sollte ich wohl besser eine `produktvergleich_id` einsetzen. Gibt es davon abgesehen weitere Verbesserungsvorschläge?
    Das Genie überblickt das Chaos!

    Wer Rechtschreibfehler findet, darf sie behalten!

  • #2
    Normalisierung wäre das SW zu deinem letzten Punkt. Davon abgesehen frage ich mich, wieso es überaupt 2 Tabellen geben muss? Einfach die View Spalte mit in die erste Tabelle mit Initialwert 0 und dann bei jedem Aufruf inkrementieren. Hoffe, ich hab dich da nicht falsch verstnaden, aber das wär wohl das einfachste...

    Das Löschen kannst du komplett in SQL lösen:

    PHP-Code:
    DELETE FROM produktvergleich WHERE DATEDIFF(NOW(),datum) > 5

    Kommentar


    • #3
      JUPP, normalisierung ist angesagt.

      Allein die Tatsache, dass AUTO, HAUS, BOOT und BOOT, HAUS, AUTO zwei Vergleiche darstellen würden, obwohl sie die gleiche Aussage besitzen, würde mich das Layout überdenken lassen.

      Kommentar


      • #4
        Vielen Dank für eure Hilfe.

        Das mit der Normalisierung hab ich jetzt nicht ganz verstanden. Dass ich alles in einer Tabelle machen kann klingt logisch und gut. Das werd' ich mir gleich mal ansehen. Aber wie ist das mit der Normalisierung gemeint?
        Das Genie überblickt das Chaos!

        Wer Rechtschreibfehler findet, darf sie behalten!

        Kommentar


        • #5
          schau mal bei wikipedia und google nach dem begriff..

          Kommentar


          • #6
            Okay, denke das mit der Normalisierung hab ich verstanden. Ist also nichts anderes, als zwei Tabellen über einen Schlüssel miteinander zu verknüpfen, richtig?

            Aber nochmal zu der Lösung mit einer einzigen Tabelle:
            Wenn ich alles in einer Tabelle mache, dann würde das also heißen, dass ich folgende Strukur bekomme:

            [id]
            [produkt1]
            [produkt2]
            [produkt3]
            [datum]
            [punkte]

            Wieviele Views/Punkte die einzelnen Vergleiche haben, würde ich dann also erst bei der Ausgabe berechnen, oder? Indem ich quasi folgenden Code verwende:
            PHP-Code:
            SELECT COUNT(punkteFROM tabelle WHERE produkt1 $produkt1 AND produkt2 $produkt2 AND produkt3 $produkt3 
            Das Löschen läuft dann so ab wie von TobiaZ beschrieben mit folgendem Code:
            PHP-Code:
            DELETE FROM produktvergleich WHERE DATEDIFF(NOW(),datum) > 5
            Ist das richtig? Oder hab ich's falsch verstanden?
            Das Genie überblickt das Chaos!

            Wer Rechtschreibfehler findet, darf sie behalten!

            Kommentar


            • #7
              Ein paar Hochkommata um $produktX und die richtig Behandlung von Strings mit 'fu' . 'bar' fehlen noch aber sonst sieht das gut aus ja.
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Kommentar


              • #8
                Danke, ich hab nur hier im Posting darauf verzichtet, die korrekte Syntax ist mir bekannt. Meine Frage bezog sich eigentlich auf die allgemeine Vorgehensweise.

                Wollte nur wissen, ob das so auch funktioniert oder ob ich da irgendwo nen Denkfehler drin hab.
                Das Genie überblickt das Chaos!

                Wer Rechtschreibfehler findet, darf sie behalten!

                Kommentar

                Lädt...
                X