In PHP ein Gewinnspiel realisieren

Zenti

Erfahrenes Mitglied
Hallo alle zusammen, :)

Seit kurzem denke ich darüber nach wie ein Gewinnspiel in PHP funktionieren mag.
Wie werden die Besucher aus der Datenbank zufällig ermittelt und wie kann man dieses Verfahren
durch z.B. "mehr Lose kaufen" manipulieren so das der Käufer der mehr Lose hat natürlich auch eine
höhere Prozentuale Gewinnchance hat. Nehmen wir an 25 Teilnehmer nehmen an einen Gewinnspiel teil,
das ist eine Gewinnchance von 4% für jeden. Nehmen wir an einer dieser Teilnehmer kauft sich ein zweites Los
und steigert somit seine Gewinnchance Prozentual.. kann er ja rein theoretisch soviele Lose kaufen bis er die 100%
erreich hat O.o.. das kann ja nicht stimmen.

Ich habe also den falschen Gedankenweg und ich komm einfach nicht darauf wie sowas zu realisieren ist.

Wäre euch sehr dankbar wenn ihr mir mal eure Gedanken zu dem Ganzen mitteilen würdet. :)

mit freundlichen Grüßen,

*Zenti
 
Nein richtig.
Angenommen du hast 100 Lose (kann man besser mit rechnen :P ). Jedes Los hat eine Nummer (meinetwegen von 1-100). Am Ende der Lotterie wird eine Zufallszahl zwischen 1 und 100 bestimmt, dieses Los gewinnt dann. Wer sich jetzt 100 Lose kauft, hat also automatisch gewonnen. Du könntest dir jetzt 1 Tabelle anlegen. In eine trägst du alle Losnummer ein, sowie ob diese schon gekauft wurden oder nicht. Wann immer sich jetzt jemand ein Los kaufen möchte, wählst du dies zufällig aus der Datenbank aus (WHERE gekauft == 0 ORDER BY RAND()). Anschließend updates du die gekauft Spalte und setzt seine Benutzerid ein. Einen zufälligen Gewinner kannst du am Ende wieder mit ORDER BY RAND() LIMIT 1 durchführen.
 
Ich hätte ne Möglichkeit bei der wirklich die Chance erhöht wird und nicht die Möglichkeit eines Ausschlusses von Spielern besteht.

Jeder Spieler bekommt am Anfang 1 Los automatisch.
Jeder kann sich neue kaufen (muss halt limitiert werden)

Am Ende wird die Menge der Lose gesamt zusammengerechnet. Aus dieser gesamtmenge kann man dann die Prozentuale Chance der einzelnen Spieler durch den prozentualen Anteil an Losen an der Gesamtmenge sehen.

10 Spieler => 10 Lose gesamt
5 Spieler kaufen je 18 Lose => 100 Lose gesamt

Jetzt haben die Spieler folgende Chancen

Spieler 1 - 5 => besitzen 1/100 der Lose, somit 1%
Spieler 6 - 10 mit je 19 Losen => besitzen je 19/100 der Lose, somit 19% Gewinnchance
 
Ich finde timestamps Idee besser als die von CookieBuster. Dennoch würde ich es noch etwas simpler machen. Bei meiner Methode können unbestimmt viele Leute unbestimmt viele Lose kaufen.

Es gibt eine Tabelle, in welche die Lose eingetragen werden. Diese Tabelle hat eine id (auto_increment, Primärschlüssel), damit jedes Los eine deindeutige Nummer hat. Außerdem gibt es eine Spalte für die ID des Käufers, eine Datetime Spalte um festzuhalten, wann das Los gekauft wurde und die ID des Gewinnspiels (wenn es z.B. jede Woche ein neues gibt).

Jetzt kann während der Frist jeder so viele Lose kaufen wie er möchte. Anschließend muss man lediglich aus der Tabelle zufällig eine Spalte auswählen, welche zum aktuellen Gewinnspiel gehört. Die Käufer-ID der Spalte ist dann der Gewinner.

Über irgendwelche Gewinnwahrscheinlichkeiten braucht man sich keine Gedanken zu machen, kann diese aber bei Bedarf errechnen und dem Käufer anzeigen.

SQL:
#ORDER BY RAND() ist sehr langsam.
#Das soll nur als Beispiel dienen und kann auch deutlich besser gelöst werden
SELECT userid FROM lose WHERE gewinnspiel=123 ORDER BY RAND() LIMIT 1;
 
Zurück