vote system das alle 2 monate ausgewertet wird - wie?

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

  • vote system das alle 2 monate ausgewertet wird - wie?

    hallo, ich habe eine frage zum aufbau oder zur logik einer datenbank, ich komme einfach nicht zu einer lösung, vielleicht kann mir jemand helfen ;-)

    ich habe ein vote-system bei dem der user verschiedenen autos (6stk.) je farben (6stk.) zuweisen kann.
    nun gibt es genau alle 2 monate einen "sieger" also für jedes auto eine siegerfarbe. die votes werden dann
    jeweils auf null gestellt - eine neue vote periode (wieder 2 monate) beginnt.

    laufzeit des projekts 10 jahre - also 60 perioden.

    mir ist einfach nicht klar wie ich das aufbauen soll.
    die votes zb ab dem 1.märz, 1juni .... sollten die votes der vergangene perioden nicht überschrieben usw.

    wie kann ich die votes auf elegante weise den entsprechenden zeitperioden zuweisen?

    mit einer ellenlange if else abfolge komme ich ja performance und übersichts mässig nicht sehr weit denk ich mal.
    vielleicht gibt es ja eine schlaue art die db entsprechend anzulegen.

    so sieht die tabelle zur zeit aus:

    id / farbname / beschriftung / farbwert / auto_1_vote / auto_2_vote / auto_3_vote / auto_4_vote / auto_5_vote / auto_6_vote / stempel
    1 / farbe_1 / Violet / 663300 / 0 / 0 / 0 / 0 / 0 / 0 / 2005-09-01 16:39:44
    2 / farbe_2 / Grün / 99FFFF / 0 / 0 / 0 / 0 / 0 / 0 / 2005-09-01 16:40:01
    3 / farbe_3 / Rot / FFFFCC / 0 / 0 / 0 / 0 / 0 / 0 / 2005-09-01 16:40:44
    4 / farbe_4 / Rosa / FF00FF / 0 / 0 / 0 / 0 / 0 / 0 / 2005-09-01 16:40:24
    5 / farbe_5 / Hellblau / 99FF99 / 0 / 0 / 0 / 0 / 0 / 0 / 2005-09-01 16:41:01
    6 / farbe_6 / Gelb / CCCC00 / 0 / 0 / 0 / 0 / 0 / 0 / 2005-09-01 10:12:13

    ich könnte jetzt für jede 2-monats periode 6 weitere einträge vorbereiten (total 60) und die votes dann
    immer der entsprechenden zeitperiode zuweisen? geht das elegant? ich denke das ist nicht besonders komfortabel oder?

  • #2
    Re: vote system das alle 2 monate ausgewertet wird - wie?

    Wenn ich Dich richtig verstanden habe, willst ermitteln, wie oft ein Auto innerhalb einer Periode einen farbwert zugewiesen bekommen hat?
    Die Farbwerte selbst sind Konstanten oder sollen sich auch ändern?
    Wenn sich die Farben auch ändern sollen, so würde ich mit einer zweiten Tabelle arbeiten, in denen die Farbeigenschaften gespeichert sind und in der Autotabelle über eine farb_id eine Zuornung machen.

    Den Aufbau der Votetabelle würde ich so gestalten:
    id | auto_nr | farb_id | zaehler | periodenstart | periodenende
    1 | 1 | 2 | 15 | 2005-09-01 00:00:00 | 2005-11-30 23:59:59
    2 | 1 | 4 | 35 | 2005-09-01 00:00:00 | 2005-11-30 23:59:59
    3 | 3 | 1 | 4 | 2005-09-01 00:00:00 | 2005-11-30 23:59:59
    ...

    Mit geeigneten Select-Statements kannst Du dann alle benötigten Daten gezielt auslesen und dieser Aufbau geht weniger verschwenderisch mit dem Speicherplatz um.
    Ob eine neue Periode beginnt kannst Du über date() abfragen und gegebenenfalls eine neue Zeile in die Tabelle eintragen (dann ist die Laufzeit auch unbegrenzt).

    Ich hoffe, dass hilft Dir etwas weiter.

    Kommentar


    • #3
      Hm Warum führst Du nicht einfach ein neues Datenbankfeld mit der Kennung der Votingperioade ein?
      DIe sind ja offensichtlich festgelegt. Wenn Du dann noch schlau bist machst Du noch eine Tabelle mit diesen ganzen Perioden, mit Gültigkeitszeitraum. Dann können die sogar später noch angesehen werden, aber nciht mehr gevoted werden.

      Kommentar


      • #4
        Original geschrieben von bitesser
        Hm Warum führst Du nicht einfach ein neues Datenbankfeld mit der Kennung der Votingperioade ein?
        DIe sind ja offensichtlich festgelegt. Wenn Du dann noch schlau bist machst Du noch eine Tabelle mit diesen ganzen Perioden, mit Gültigkeitszeitraum.
        Ja, volle Zustimmung. Das wäre dann noch speicherplatzsparender und ist sinnvoll.
        Dann können die sogar später noch angesehen werden, aber nciht mehr gevoted werden.
        Das geht bei meinem System bereits.
        Es hängt natürlich davon ab welches PHP-Script man drumrumbastelt.

        Kommentar


        • #5
          besten dank erstmal für die ausführlichen antworten.

          ja die 6 farbwerte sind konstanten.

          jedem der 6 autos können eine der 6 farben zugewiesen werden. am ende jeder 2-monats periode will ich für jedes auto eine rangliste der farben ausgeben. (farbe x wurde 500 mal zugewiesen, farbe y wurde 340 mal zugewiesen ... das für jedes auto).

          jede 2 monats periode soll mit 0 votes beginnen, die vergangenen perioden sollen aber archiviert bleiben.

          Kommentar


          • #6
            All das ist mit dem oben genannten Tabellenaufbau möglich.

            Kommentar


            • #7
              muss ich denn nicht pro farbe je eine zeile haben damit ich diese für die ausgabe der rangliste sortieren lassen kann?

              Kommentar


              • #8
                Original geschrieben von kendal
                muss ich denn nicht pro farbe je eine zeile haben damit ich diese für die ausgabe der rangliste sortieren lassen kann?
                Hast Du doch.
                Sobald für ein Auto die Farbe gewählt wird, muss Dein Script prüfen, ob es bereits einen Eintrag gibt. Wenn ja, muss der Zähler um einen erhöht werden und wenn nein muss der Eintrag mit dem Zaehler 1 angelegt werden.

                Kommentar


                • #9
                  also untenstehende tabelle würd funktionieren wenn ich das richtig verstehe:

                  id | auto_1_zaehler | auto_2_zaehler | auto_3_zaehler | auto_4_zaehler | auto_5_zaehler | auto_6_zaehler | farb_id | zaehler | periodenstart | periodenende
                  1 | n | n | n | n | n | n | 1 | 2005-09-30 | 2005-11-30
                  2 | n | n | n | n | n | n | 2 | 2005-09-30 | 2005-11-30
                  3 | n | n | n | n | n | n | 3 | 2005-09-30 | 2005-11-30
                  4 | n | n | n | n | n | n | 4 | 2005-09-30 | 2005-11-30
                  5 | n | n | n | n | n | n | 5 | 2005-09-30 | 2005-11-30
                  6 | n | n | n | n | n | n | 6 | 2005-09-30 | 2005-11-30
                  hier wieder 6 reihen wie oben aber mit nächster zeitperiode usw...

                  entschuldige bitte meine fragerei, aber für mich ist das eine ziemlich komplexe aufgabe, anfänger :-( und ich möchte ja dabei auch etwas lernen.

                  Kommentar


                  • #10
                    Funktioniert schon, ist aber umständlich.
                    Schau Dir meinen Aufbau nochmal genau an.
                    Die Autonummer habe ich doch als Extrafeld eingefügt.
                    Es ist nicht notwendig, dass Du alle Autos in eine Zeile quetschst.
                    Mach pro Farbe und Autonummer einen Eintrag.
                    Mach eine universale Farbzählroutine, die lediglich die Autonr, die Periode und den Farbcode als Parameter übermittelt bekommt und entsprechend den aktuellen Stand aus der DB ausliest, anschließend den Zähler erhöht und den Datensatz wieder abspeichert.
                    So kannst Du diese Routine für alle Autos benutzen und hältst den Arbeitsaufwand in Grenzen.

                    Bei Deinem jetzigen Aufbau musst Du mit zahlreichen IF- oder switch-Anweisungen umständlich ermitteln bei welchem Auto der Farbzähler erhöht werden soll.

                    P.S.: Mit Zähler meine ich die Anzahl der Votes für diese spezielle Kombination zwischen Auto und Farbnr. Das heisst im Klartext: wenn 5000 Leute für Auto 2 in grün stimmen, hast Du trotzdem nur ein Zeile für diese Kombination in der Datenbank.

                    Kommentar


                    • #11
                      wenn ich das richtig verstehe wären das 36 zeilen für alle auto/farb kombos. und für jede weitere zeitperiode je 36 weitere.

                      mhh ich hoffe so wars gemeint?

                      Kommentar


                      • #12
                        Wenn jede Kombination tatsächlich mindestens einmal gewählt wurde: ja.
                        Falls Du Performancebedenken hast: da lacht MySQL nur drüber.

                        Der Vorteil liegt in der späteren Auswertung.
                        Mit einfachen Queries kannst Du später nicht nur die Topfarbe pro Auto, sondern auch die allgemein beliebteste Farbe innerhalb einer Periode ermitteln. Oder Du könntest einen Beliebtheitsgraphen pro Farbe über alle Perioden machen und so Trends darstellen, oder ...
                        Du hast es jedenfalls wesentlich einfacher bei der Auswertung.

                        Kommentar


                        • #13
                          supi, besten dank, mal schauen ob ich mit der abfragerei klar komme ;-)


                          Wenn jede Kombination tatsächlich mindestens einmal gewählt wurde: ja.
                          ich dachte ich fülle die datenbank vorher mit null vote werten. ich muss die perioden ja auch vorher definieren. ist doch nicht falsch oder?

                          Kommentar


                          • #14
                            Original geschrieben von kendal
                            ich dachte ich fülle die datenbank vorher mit null vote werten. ich muss die perioden ja auch vorher definieren. ist doch nicht falsch oder?
                            Um Gottes Willen. Nur der faule Pogrammierer ist ein guter Programmierer. *g*
                            Lass das ne Routine erledigen. Das habe ich ja weiter oben bereits beschrieben. So brauchst Du dann nie wieder Hand an das Script anlegen - es verwaltet sich selbst. Außerdem könntest Du so auch beliebig viele weitere Autos anlegen und wenn eine weitere Farbe hinzukommen sollte, hast Du auch keine Arbeit damit.

                            Kommentar


                            • #15
                              Original geschrieben von kendal
                              ich muss die perioden ja auch vorher definieren. ist doch nicht falsch oder?
                              Hol Dir mit date den aktuellen Monat und teile ihn durch 2.
                              Der intval davon repräsentiert die aktuelle Periode des Jahres.
                              Daraus kannst Du den Start- und End-Timestamp der aktuellen Periode ermitteln und in einer zweiten Tabelle speichern.
                              Beim Eintrag brauchst Du dann nur den aktuellen Timestamp ermitteln [$timestamp=time() ] und kannst so leicht ermitteln, ob es die aktuelle Periode bereits gibt.
                              Wenn nein, leg sie automatisch per Script an, wenn ja schau in dieVote- DB und schau nach, ob es bereits einen Datensatz für diese Kombination von Autonr udn Farbnr gibt.

                              Löse so viel wie es geht (und es geht eigentlich immer alles *g*) per Script und Du hast nach Fertigstellung keine Sorgen mehr.
                              So ist zumindest meine Vorgehensweise, aber viele Wege führen nach Rom.
                              Man kann natürlich alles auch ganz anders lösen.

                              Kommentar

                              Lädt...
                              X