Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
storky

Anmeldungsdatum: 06.01.2013 Beiträge: 68
|
Verfasst am: 03.10.2013, 16:05 Titel: Prozentrechnung für... |
|
|
Hallo,
ich steh gerade auf dem Schlauch, ich brauch einen Formel (wird sicherlich nicht allzu kompliziert sein) die aus:
dem alten Prozentwert
einen neuen Prozentwert
und der Anzahl der Werte die zum alten Wert geführt haben
einen neuen Prozentwert errechnet.
Also so:
Code: | function plugin_rate() {
if (isset($_GET['rate']) and isset($_POST['uid']) and isset($_POST['val'])) {
if (is_numeric($_POST['val']) and is_numeric($_POST['uid'])) {
$uid = $_POST['uid'];
$val = $_POST['val'];
$erg = mysql_query("SELECT proc, hits FROM userprofile WHERE uid = '$uid' LIMIT 1;");
if (mysql_num_rows($erg)) {
$row = mysql_fetch_object($erg);
//neu berechnen & update
}
}
}
} |
$row->hits wäre dann die Anzahl, $row->proc der alte Wert und $val der Neue.
Kann mir jemand helfen?
Die Möglichkeit einfach alle Werte zu speichern fällt aus, da ich bereits Werte habe. Nur habe ich es damals so gemacht, dass es als Rate nur true/false gab und ich das Verhältnis davon in % ausgedrückt hab (geht um den kompletten Neuaufbau eines Webprojektes, die alten Prozentwerte hab ich nur in der DB weil ich aus Performancegründen diese Berechnung gecached habe). Also kann ich dadraus die fehlenden Werte nicht ableiten und wär mir auch lieb wenn die "rate-wert-Tabelle" einfach verschwindet, wegen Speicher und Performance, so dass ich gleich den %-Wert habe. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4687 Wohnort: ~/
|
Verfasst am: 03.10.2013, 17:13 Titel: |
|
|
Ich weiß jetzt leider nicht genau, welche Voraussetzungen gegeben und welche gesucht sind, daher tue ich mir schwer mit der Beantwortung der Frage. Wegen des erwähnten "true/false" schätze ich mal, es geht um Folgendes:
Du hast eine Anzahl von Werten, von denen eine bestimmte Zahl "true" ist und der Rest "false". also z. B. 100 "gespeicherte" Werte, von denen 78% "true" sind. Dazu kommen jetzt weitere (z. B.) 50 Werte, von denen 24% "true" sind. Du weißt die Gesamtzahlen 100 und 50 sowie die Prozentsätze 78% und 24%. Du willst die neue Gesamtzahl 150 und den neuen Prozentsatz 60% wissen. Ist meine Vermutung soweit richtig? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
storky

Anmeldungsdatum: 06.01.2013 Beiträge: 68
|
Verfasst am: 03.10.2013, 17:31 Titel: |
|
|
Nein, sorry. Also mit True & False das war einmal. Nun soll der Benutzer die Möglichkeit haben eine Wertigkeit von 0 - 100 zu vergeben und diese soll zum neuen Prozentwert führen.
Da ich es aber davor mit true/false gemacht habe, ist das etwas völlig Neues. Alles was ich jetzt noch habe ist die Anzahl der Ratings, den alten Prozentwert und das neue Rating (0-100).
Nun soll anhand des alten Prozentwerts und der Anzahl der Ratings das Neue eingerechnet werten wenn der User es abschickt.
Also bsp:
alter Wert: 78.5%
Ratings: 50
Usereingabe: 50%
So dass nun 78,5% dementsprechend absinkt. Ich hab echt keine Idee.
Das mit true & false hab ich noch mit hingeschrieben, damit man weiß wie die alten Werte zustande kamen. Ansonsten könnte ich ja einfach jeden Rate speichern und den Durchschnitt mit dem arithmetischen Mittel bestimmen, aber das wäre ja nicht mehr kompatibel. Aber ohne jeden Wert zu speichern wär mir sowieso lieber.
Wollte damit keine Verwirrung stiften.
Danke
Edit: Obwohl Möglich wäre es doch wenn ich false = 0% und true = 100% mache, aber wie gesagt ohne die Tabelle wär mir das am allerliebsten. (Die hat jetzt schon ~300.000 Einträge.) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4687 Wohnort: ~/
|
Verfasst am: 03.10.2013, 17:41 Titel: |
|
|
Ok, damit lässt sich schon was anfangen.
(AlteBenutzerzahl*AlterProzentwert + NeuerProzentWert) / (AlteBenutzerzahl + 1) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
storky

Anmeldungsdatum: 06.01.2013 Beiträge: 68
|
Verfasst am: 03.10.2013, 17:50 Titel: |
|
|
Ja. Ist genau das was ich brauche. Hab mal 2 Beispiele gerechnet:
Zitat: | (0 * 0 + 100) / (0 + 1) = 100
(1 * 50 + 25) / (1 + 1) = 37,5 |
Danke!
Edit:
Mal hier das ganze in PHP implementiert, falls es für jemanden relevant ist. Ich freu mich nämlich gerade, in der alten Version hatte ich das mit Durchschnitt gelöst.. So ist s alle mal "smarter".
Code: | function plugin_rate() {
if (isset($_GET['rate']) and isset($_POST['uid']) and isset($_POST['val'])) {
if (is_numeric($_POST['val']) and is_numeric($_POST['uid'])) {
$uid = $_POST['uid'];
$val = $_POST['val'];
$erg = mysql_query("SELECT proc, hits FROM userprofile WHERE uid = '$uid' LIMIT 1;");
if (mysql_num_rows($erg)) {
$row = mysql_fetch_object($erg);
$proc = ($row->hits * $row->proc + $val) / ($row->hits + 1);
mysql_query("UPDATE userprofile SET proc = '$proc', hits = hits + 1 WHERE uid = '$uid';");
}
}
}
} |
|
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1276 Wohnort: Ruhrpott
|
Verfasst am: 04.10.2013, 05:52 Titel: |
|
|
Wäre es nicht einfacher und auch mathematisch sinnvoller, in einer Variablen die Summe aller Prozentsätze und in einer zweiten Variablen die Zahl aller Benutzer zu speichern und daraus dann den Durchschnitt auszurechnen? Bei der Formel von nemored wird ja mit
AlteBenutzerzahl*AlterProzentwert
die Summe aller Prozentsätze jedesmal aus dem Durchschnitt und der Benutzerzahl zurückgerechnet, da dürfte sich im Laufe der Zeit einiges an Rundungsfehlern ansammeln.
mfG
grindstone |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 05.10.2013, 17:03 Titel: |
|
|
ORMs setzen sich in der PHP-Welt nur sehr langsam durch, wie mir scheint. Selbst in großen und bekannten Projekten wird blankes SQL eingesetzt (ownCloud, Drupal, Wordpress, ...)... mir komplett unverständlich. |
|
Nach oben |
|
 |
|