PHP/SQL Probleme bei der Abfrage mit Join und Darstellung (Fussballtippspiel)

So auf die schnelle

1) Alle user auslesen
2) Alle Spiele mit passenden Tipps auslesen (LEFT JOIN)
3) Die Resulate in ein mehrdimensionales Array speichern
4) Anhand des Arrays die Ausgabe meistern

PHP:
//Alle user auslesen
$sql = <<<SQL
SELECT DISTINCT 
    tip.username 
FROM 
    tipps_1213 AS tip
ORDER BY 
    tip.username
SQL;

$result = mysql_query($sql);
$users = array();
while($row = mysql_fetch_assoc($result)){
    $users[] = $row['username']; 
}

//Alle Spiele mit den dazuhgehörigen Tipps für Spieltag 1 auswählen
$sql = <<<SQL
SELECT
   part.id_partien,
	part.heimteam,
	part.gastteam,
	CONCAT_WS(':',part.tore_heimteam, part.tore_gastteam) AS tore,
	tip.username,
	CONCAT_WS(':',tip.tipp_tore_heimteam, tip.tipp_tore_gastteam) AS tip
FROM
	partien_1213			AS part
	-- Mit dem LEFT JOIN sicherstellen dass alle Spiele kommen, auch wenns keine Tips gibt
	LEFT JOIN tipps_1213 AS tip
		ON part.id_partien = tip.id_partien
WHERE
	part.spieltag = 1
SQL;

$result = mysql_query($sql);
$games = array();
//Ich verwende objekt, da es sonst ein lese-Chaos mit den Arrays gibt
while($row = mysql_fetch_object($result)){
    //Pro Spiel die Spielinfos nur einmal setzen
    if(!array_key_exists($row->id_partien, $games)){
        $games[$row->id_partien]['heimteam'] = $row->heimteam;
        $games[$row->id_partien]['gastteam'] = $row->gastteam;
        $games[$row->id_partien]['tore'] = $row->tore;
        //Ein Subarray mit allen user als key erstellen
        $games[$row->id_partien]['tipps'] =  array_fill_keys($users, null);
    }
    //User-Tipps abfüllen
    $games[$row->id_partien]['tipps'][$row->username] =  $row->tip;
}


//Ausgabe

echo "<table>\n";
//Titelzeile
echo "<tr><th>Heimteam</th><th>Gassteam</th><th>Tore</th>";
foreach($users as $user) echo "<th>{$user}</th>";
echo "</tr>\n";

//Details
foreach($games as $game){
    echo "<tr><td>{$game['heimteam']}</td><td>{$game['gastteam']}</td><td>{$game['tore']}</td>";
    foreach($game['tipps'] as $user => $tipp){
        echo "<td>{$tipp}</td>";
    }
    echo "</tr>\n";
}

$games sieht etwa so aus
Code:
Array
(
    [316] => Array
        (
            [heimteam] => Borussia Dortmund
            [gastteam] => SV Werder Bremen
            [tore] => 2:1
            [tipps] => Array
                (
                    [Paul] => 4:1
                    [Toni] => 3:0
                    [Xiaodeguo] => 3:1
                )

        )

    [317] => Array
        (
            [heimteam] => Borussia Mönchengladbach
            [gastteam] => TSG 1899 Hoffenheim
            [tore] => 2:1
            [tipps] => Array
                (
                    [Paul] => 3:1
                    [Toni] => 2:1
                    [Xiaodeguo] => 2:0
                )

        )
...
 

Neue Beiträge

Zurück