Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Variable in einer while Schleife hochzählen

29 views
Skip to first unread message

Michael Massenberg

unread,
Aug 8, 2010, 7:02:19 AM8/8/10
to
Hi!

Seit vielen Tagen grübel ich über ein Problem, welches ich nicht gelöst
bekomme. :-\

Mit diesem Code frage ich die Anzahl der höchsten Drei Zahlen im Feld
tipp_points ab:

$sql = "SELECT COUNT(tipp_points) as anzahl FROM " . FORMEL_TIPPS_TABLE . "
WHERE tipp_race = $race_id
GROUP BY tipp_points
ORDER BY tipp_points DESC LIMIT 3";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not query formel_tipps', '',
__LINE__, __FILE__, $sql);
}


Mit diesem Script erhalte ich das korrekte Ergebnis:

while($row = mysql_fetch_object($result))
{
$anz_place = $row->anzahl;
echo $anz_place;
echo "<br>";
}

Das ganze sieht dann z.B. so aus:

1
1
5

Dieses Ergebnis benötige ich aber in drei einzelnen globalen Variablen
$anz_place_1, $anz_place_2 bzw. $anz_place_3:

$anz_place_1 = 1
$anz_place_2 = 2
$anz_place_3 = 5

D.h. $anz_place muss in dieser while Schleife hochgezählt werden.

Nur wie muss das ganze aussehen. Diverse Dokus inkl. dem PHP Handbuch
brauchten mich bisher nicht weiter. Mir will sich die Lösung einfach
nicht erschließen. :-(

Bye Massi
--

Michael Massenberg

unread,
Aug 8, 2010, 7:12:56 AM8/8/10
to
Hi!

Seit vielen Tagen grübel ich über ein Problem, welches ich nicht gelöst
bekomme. :-\

Mit diesem Code frage ich die Anzahl der höchsten Drei Zahlen im Feld
tipp_points ab:

$sql = "SELECT COUNT(tipp_points) as anzahl FROM " . FORMEL_TIPPS_TABLE . "
WHERE tipp_race = $race_id
GROUP BY tipp_points
ORDER BY tipp_points DESC LIMIT 3";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not query formel_tipps', '',
__LINE__, __FILE__, $sql);
}


Mit diesem Script erhalte ich das korrekte Ergebnis:

while($row = mysql_fetch_object($result))
{
$anz_place = $row->anzahl;
echo $anz_place;
echo "<br>";
}

Das ganze sieht dann z.B. so aus:

1
1
5

Dieses Ergebnis benötige ich aber in drei einzelnen globalen Variablen
$anz_place_1, $anz_place_2 bzw. $anz_place_3:

$anz_place_1 = 1
$anz_place_2 = 1

Matthias P. Wuerfl

unread,
Aug 8, 2010, 7:56:24 AM8/8/10
to
Es schrieb Michael Massenberg:

> Dieses Ergebnis benötige ich aber in drei einzelnen globalen Variablen
> $anz_place_1, $anz_place_2 bzw. $anz_place_3:
>
> $anz_place_1 = 1
> $anz_place_2 = 2
> $anz_place_3 = 5
>
> D.h. $anz_place muss in dieser while Schleife hochgezählt werden.

Variable Variablen.

http://php.net/manual/de/language.variables.variable.php

$i = 1

while($row = mysql_fetch_object($result))
{
$var_name = "anz_place_" . $i;
// $var_name enthält den Namen der Variable
// man beachte das doppelte "$":
$$var_name = $row->anzahl;
$i++;
}

Grüße, Matthias

Michael Massenberg

unread,
Aug 8, 2010, 8:09:25 AM8/8/10
to
Hi!

Matthias P. Wuerfl schrieb:
> Variable Variablen.
>
> http://php.net/manual/de/language.variables.variable.php

Perfekt, groooßes Dankeschön. :-)

Bye Massi
--

Willi Marquart

unread,
Aug 8, 2010, 9:22:27 AM8/8/10
to
Michael Massenberg schrieb:

Gibt es einen Grund, warum Du keinen Array verwenden willst?

Gruß Willi

Michael Massenberg

unread,
Aug 8, 2010, 3:11:23 PM8/8/10
to
Hi!

Willi Marquart schrieb:


> Gibt es einen Grund, warum Du keinen Array verwenden willst?

Ich sehe da jetzt einfach nicht die Notwendigkeit wegen 3 Werten ein
Array zu "basteln". Und genau "basteln" wäre es, weil ich mich da noch
extrem schwer mit tue.

Bye Massi
--

Willi Marquart

unread,
Aug 8, 2010, 4:16:14 PM8/8/10
to
Michael Massenberg schrieb:

"Variable Variablen" sind viel mehr Bastelei als es Arrays je sein
könnten und sind in den meisten Programmiersprachen gar nicht möglich.

$anz_place=array();


while($row = mysql_fetch_object($result))
{
$anz_place[] = $row->anzahl;
}

Gruß Willi

Richard Ohl

unread,
Aug 9, 2010, 5:59:07 AM8/9/10
to
Michael Massenberg tastaturte dies:

> while($row = mysql_fetch_object($result)) {
> $anz_place = $row->anzahl;
> echo $anz_place;
> echo "<br>";
> }

> Dieses Ergebnis benötige ich aber in drei einzelnen globalen Variablen
> $anz_place_1, $anz_place_2 bzw. $anz_place_3:

Hi Michael,
den Grund für die globalen Variablen will ich vermutlich garnicht wissen (du
möchtest bestimmt etwas über Arrays lernen), aber so sollte es gehen:
$i = 1;
while (...) :
${'anz_place_' . $i} = $row->anzahl;
...
++$i;
endwhile;

http://uk3.php.net/manual/en/language.variables.variable.php

HTH Richard

Michael Massenberg

unread,
Aug 11, 2010, 9:40:51 AM8/11/10
to
Hi!

Willi Marquart schrieb:


> "Variable Variablen" sind viel mehr Bastelei als es Arrays je sein
> könnten und sind in den meisten Programmiersprachen gar nicht möglich.
>
> $anz_place=array();
> while($row = mysql_fetch_object($result))
> {
> $anz_place[] = $row->anzahl;
> }

Das habe ich versucht umzusetzen und bin kläglich gescheitert. :-\

Mit dem Vorschlag von Matthias und folgender Schleifenkonstruktion tut
es jedoch bestens:


// Place 1
if ($anz_place_1 == '1')
{
$bet_race_place_1 = ($bet_race_place_1 / $anz_place_1);
}
elseif ($anz_place_1 == '2')
{
$bet_race_place_1 = (($bet_race_place_1 + $bet_race_place_2) /
$anz_place_1);
}
elseif ($anz_place_1 > '2')
{
$bet_race_place_1 = ($bet_race_sum / $anz_place_1);
}

// Place 2
if ($anz_place_1 == '1' && $anz_place_2 == '1')
{
$bet_race_place_2 = ($bet_race_place_2 * $anz_place_2);
}
elseif ($anz_place_1 == '1' && $anz_place_2 >= '2')
{
$bet_race_place_2 = (($bet_race_place_2 + $bet_race_place_3) /
$anz_place_2);
}

// Place 3
if ($anz_place_1 == '1' && $anz_place_2 == '1' && $anz_place_3 >= '1')
{
$bet_race_place_3 = (((($bet_race_sum/'100') * $race_place_3)) /
$anz_place_3);
}
elseif ($anz_place_1 == '2' && $anz_place_2 >= '1')
{
$bet_race_place_3 = ($bet_race_place_3 / $anz_place_2);
}

Das ganze ist die Berechnung des Preisgeldes einer virtuellen F1 Wette.

$bet_race_sum entspricht 100% des Topfes
$bet_race_place_1 entspricht 50% des Topfes
$bet_race_place_2 entspricht 30% des Topfes
$bet_race_place_3 entspricht 20% des Topfes

Gibt es je einen ersten, zweiten und dritten Platz bekommt dieser halt
50%, 30% bzw. 20% des Topfes. Gibt es mehrere erste Plätze entfällt der
Zweite bzw. auch der Dritte Platz. Der erste bekommt dann die Summe vom
ersten, zweiten bzw. des dritten Platzes durch die Anzahl des ersten
Platzes. Dito das ganze für den zweiten Platz bzw. dritten Platz. Im
Extremfall gibt es dann nur erste Plätze die sich dann die 100% teilen.

Bye Massi
--

Willi Marquart

unread,
Aug 11, 2010, 10:55:54 AM8/11/10
to
Michael Massenberg schrieb:

>Willi Marquart schrieb:
>> "Variable Variablen" sind viel mehr Bastelei als es Arrays je sein
>> könnten und sind in den meisten Programmiersprachen gar nicht möglich.
>>
>> $anz_place=array();
>> while($row = mysql_fetch_object($result))
>> {
>> $anz_place[] = $row->anzahl;
>> }
>
>Das habe ich versucht umzusetzen und bin kläglich gescheitert. :-\
>
>Mit dem Vorschlag von Matthias und folgender Schleifenkonstruktion tut
>es jedoch bestens:
>
>
>// Place 1
>if ($anz_place_1 == '1')
>{
> $bet_race_place_1 = ($bet_race_place_1 / $anz_place_1);
>}

Mir ist nicht klar, was an $anz_place[1] komplizierter sein soll als
an $anz_place_1. Abgesehen davon, wofür sollen die Zeilen gut sein?
Was ändert sich mm Wert von $bet_race_place_1, wenn er durch 1 geteilt
wird?

>// Place 2
>if ($anz_place_1 == '1' && $anz_place_2 == '1')
>{
> $bet_race_place_2 = ($bet_race_place_2 * $anz_place_2);
>}

Siehe oben, auch Multiplizieren mit eins bringt nicht viel.
Mag sein, das die ermittelten Ergebnisse richtig sind, aber einfach
geht anders.

Gruß Willi

0 new messages