While in Array schreiben und dann in Datenbank damit

thejoyride

Grünschnabel
Hallo,

im bezug auf meinen vorherigen Post (http://www.tutorials.de/php/389437-php-liga-tabelle.html) habe ich nun noch eine Frage.

Ich kann mir mittlerweilen Dank Eurer Hilfe eine schöne Tabelle erstellen. Nun möchte ich nach jeder Turnierrunde die Tabelle nehmen und mit einen ergänzten Wert in die Datenbank schreiben (separate Tabelle). Sprich ich habe 5 Plätze in meiner Tabelle, diese 5 Plätze erhalten jeweils Wertungspunkte (Platz 1 = 5, Platz 2 = 3, Platz 3 = 2 Punkte, Platz 4 = 1 Punkt und Platz 5 = 0 Punkte).

Der Quellcode zum auslesen und ausgeben der Tabelle schaut wiefolgt aus:

PHP:
				<table width="540px"; border="1">
					<tr>
						<td>
							Platz
						</td>
						<td>
							Team
						</td>
						<td style="text-align:center;">
							Spiele
						</td>
						<td style="text-align:center;">
							S
						</td>
						<td style="text-align:center;">
							U
						</td>
						<td style="text-align:center;">
							N
						</td>
						<td style="text-align:center;">
							Tore
						</td>
						<td style="text-align:center;">
							TD
						</td>	
						<td style="text-align:center;">
							Punkte
						</td>	
					</tr>

					<?php			
						$sql = "
						SELECT t_team AS Mannschaft, count(*) team,

						(SELECT count(*) punkte
						FROM tabelle
						WHERE team = t_id AND Turnier = $turnierrunde AND punkte = 3
						GROUP BY team) AS Gewonnen,
						(SELECT count(*) punkte
						FROM tabelle
						WHERE team = t_id AND Turnier = $turnierrunde AND punkte = 1
						GROUP BY team) AS Unenetschieden,
						(SELECT count(*) punkte
						FROM tabelle
						WHERE team = t_id AND Turnier = $turnierrunde AND punkte = 0
						GROUP BY team) AS Verloren,
						 sum( tore ) AS Tore, sum( gegentore ) AS Gegentore, sum(torediffernez) AS Tordifferenz, sum( punkte ) AS Punkte

						FROM tabelle, team
						WHERE team = t_id AND Turnier = $turnierrunde
						GROUP BY team ORDER BY Punkte DESC, Tordifferenz DESC, Tore DESC";
							
						$adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
					?>
					<?php
						while ($adr = mysql_fetch_array($adressen_query)){
						$teamid = $adr['t_id'];
					?>	
					<tr>
						<td>
							<?php echo $count;   ?>
						</td>
						<td>
							<? echo $adr['Mannschaft']; ?>
						</td>
						<td style="text-align:center;">
							<? echo $adr['team']; ?>
						</td>
						<td style="text-align:center;">
							<? echo $adr['Gewonnen']; ?>
						</td>
						<td style="text-align:center;">
							<? echo $adr['Unenetschieden']; ?>
						</td>
						<td style="text-align:center;">
							<? echo $adr['Verloren']; ?>
						</td>
						<td style="text-align:center;">
							<? echo $adr['Tore']; ?> : <? echo $adr['Gegentore']; ?>
						</td>
						<td style="text-align:center;">
							<? echo $adr['Tordifferenz']; ?>
						</td>
						<td style="text-align:center;">
							<? echo $adr['Punkte']; ?>
						</td>
						<td style="text-align:center;">
							Punkte
						</td>			
					</tr>	
					<?php $count ++; ?>
					<?php
						}
					?>
				</table>

Dann lasse ich die Plätze in der Schleife ausgeben.

Wie oben erwähnt müsste ich das ganze in ein Array bringen mit dem zusätzlichen Feld für Punkte und dann wieder in die Datenbank schreiben. Für das schreiben in die Datenbank reichen mir die Felder Platz, Team und das noch nicht vorhandene Feld Wertungspunkte (welche wie oben beschrieben vergeben werden).

Vielen Dank vorab für Eure Hilfe!!
 
Zuletzt bearbeitet von einem Moderator:
in den Array:
PHP:
$rows = array();
while ($adr = mysql_fetch_array($adressen_query)){
    $rows[] = $adr;
    //Hier dein Code
}

Warum kriegt Platz2 nur 3 Punkt und nicht 4?
Können es mehr als 5 Einträge sein? Wenn ja, werden nur die 5 ersten bewertet und all eanderen haben 0 Punkte?
 
Die Punktevergabe erfolgt nach einen Beispiel aus der Formel 1. Dort erhält der erste um x Punkte mehr als der 2te Platz und so weiter ... Wir haben wollen es ähnlich halten, jedoch nicht so große sprünge, da für unser Prinzip am Ende der so die größte Spannung besteht. Dieses Jahr sind es definitiv nur 5 Spieler, in den folgenden Jahren eventuell mehr. Aber bis September 2013 ist das erstmal fix.
 
Was für eine 'Formel 1'? Du meinst das Ding mit dem 2er Sprung und nachher nur noch 1er Sprünge? Ergo es lässt sich nicht mit einer mathematischen Formel berechnen, denn '[Punkte] = [Anzahl teams]-[Platz]+1' geht wegend em einen 2er-Sprung ja nicht.
 
Ja genau, dass mit den Sprüngen meine ich hier. Puh, dann wird es schwierig. Hast du / ihr eventuell noch eine andere Idee, wie man das sonst umsetzen kann?
 
PHP:
<table width="540px"; border="1">
    <tr>
        <th>Platz</th>
        <th>Team</th>
        <th style="text-align:center;">Punkte</th>    
    </tr>
<?php
//Testdaten: Sortierte Liste aus der DB
$rows[] = array('id' => 24,     'team' => 'abc');
$rows[] = array('id' => 7868,   'team' => 'ghi');
$rows[] = array('id' => 2,      'team' => 'def');
$rows[] = array('id' => 7,      'team' => 'jkl');
$rows[] = array('id' => 45,     'team' => 'mno');

//Punktezuordnung. Bei mhr Teams muss diese Liste angepasst werden
$punkteList[1] = 5;
$punkteList[2] = 3;
$punkteList[3] = 2;
$punkteList[4] = 1;
$punkteList[5] = 0;

foreach($rows as $i => &$row){
    $row['platz'] = $i+1;
    $row['punkte'] = $punkteList[$row['platz']];
    echo <<<HTML
    <tr>
        <td>{$row['platz']}</td>
        <td>{$row['team']}</td>
        <td style="text-align:center;">{$row['punkte']}</td>
    </tr> 
HTML;
    
    //SQL zusammenbasteln
    $sql = <<<SQL
    UPDATE mytable
    SET punkte = punkte + {$row['punkte']}
    WHERE team_id = {$row['id']};
SQL;
    //Hier das SQL abfeuern
    //TODO: mysql_query($sql);
}
?> 
</table>
 
Zurück