Zur Navigation

Berechnung PHP [2]

11 Jörg

Ja, aber nach welchem Verfahen möchtest du die überschüssigen Teilnehmer abziehen? sollen die proportional abgezogen werden? solange das Verfahren nicht bekannt ist, kann man dieses auch nicht in ein Script übersetzen :)

Das sinnvollste ist vermutlich, die Differenz proportional abzuziehen. Dazu musst du die Teilnehmerzahlen mit der maximalen Gesamtanzahl (hier 92) multiplizieren und durch die reale Gesamtzahl dividieren und abschließend runden. Es kann aber passieren, dass dies trotzdem nicht genau aufgeht, wenn z.B. alle drei abgerundet werden, dann sind's am Ende 91, oder wenn alle aufgerundet werden 93. Es gibt bei der Umrechnung von Wahlergebnissen in Parlamentssitze recht komplexe Verfahren, die sicherstellen, dass der Proporz immer genau aufgeht:

http://de.wikipedia.org/wiki/D’Hondt-Verfahren

Ist alles nicht so einfach ;)

04.06.2012 23:32 | geändert: 04.06.2012 23:35

12 tobi

tja, leider ist dies eine gute Frage und stellt mich eigentlich vor ein großes Rätsel ;) einfach ist´s leider nicht. zur Not muss es halt ohne gehen.

04.06.2012 23:45

13 tobi

so scheints zu gehen:
// sql-Abfrage 8 - Ermitteln der Berechnung der Teilnehmer von Sonntag
$sql_sonntag_berechnung_a_b_c = "SELECT cut.gemeldeteKlasse, COUNT(cut.id) FROM (SELECT * FROM anmeldungen WHERE gemeldeteKlasse = '3' OR gemeldeteKlasse = '4' OR gemeldeteKlasse = '5' ORDER BY id LIMIT 192) AS cut  GROUP BY gemeldeteKlasse";
$result_sonntag_berechnung_a_b_c = mysql_query( $sql_sonntag_berechnung_a_b_c );
$sonntag_berechnung_a_b_c = array('3'=>0, '4'=>0, '5'=>0); // erst mal mit 0 initialisieren
while ($row = mysql_fetch_row($result_sonntag_berechnung_a_b_c)) {
   $sonntag_berechnung_a_b_c[''.$row[0]] = $row[1];
}

Die Anzahl der Teilnehmer des Wettbewerbes <a class="links" href="http://test.de/teilnehmer-a-klasse" title=\"Teilnehmer Wettbewerb A-Klasse">A-Klasse</a>: <b><?php echo $sonntag_berechnung_a_b_c['5'];?></b><br />
Die Anzahl der Teilnehmer des Wettbewerbes <a class="links" href="http://test.de/teilnehmer-b-klasse" title=\"Teilnehmer Wettbewerb B-Klasse">B-Klasse</a>: <b><?php echo $sonntag_berechnung_a_b_c['4'];?></b><br />
Die Anzahl der Teilnehmer des Wettbewerbes <a class="links" href="http://test.de/teilnehmer-c-klasse" title=\"Teilnehmer Wettbewerb C-Klasse">C-Klasse</a>: <b><?php echo $sonntag_berechnung_a_b_c['3'];?></b></p>

07.06.2012 12:04 | geändert: 07.06.2012 12:06

1 Forenmitglied fand diesen Beitrag gut

14 Jörg

Ja, das ist 'ne gute Möglichkeit - ich war wegen der Überschrift des Threads zu sehr darauf fixiert, die Beschränkung nachträglich in PHP zu machen :)

vorausgesetzt die Spalte `id` hat einen AUTO_INCREMENT - andernfalls würde ich eher nach einer Anmeldezeit sortieren, das wäre dann sicherer.

07.06.2012 12:48

15 tobi

Ja, die Spalte `id` hat einen AUTO_INCREMENT. Allerdings kann es vorkommen, dass ich zwischendrin, bei einer Klasse eine 0 eintragen muss, da der Teilnehmer abgesagt hat. timestamp speichere ich beim Anmelden, wäre mit Sicherheit auch ne Idee, dies noch einzubauen, wenn du dies als Empfehlenswerter erachtest ;)
wie müßte ich denn das timestamp einbauen?
... ORDER BY timestamp LIMIT 192 ...

07.06.2012 16:01

16 Jörg

Ja, genauso

07.06.2012 16:07

1 Forenmitglied fand diesen Beitrag gut

17 tobi

Alles klar, mercy ;)

07.06.2012 16:08 | geändert: 07.06.2012 16:08

Beitrag schreiben (als Gast)





[BBCode-Hilfe]