Ik wil een overzicht maken van uitslagen en seizoenen, maar ik kom er niet uit. Zie de afbeelding voor een voorbeeld. Het kan dus voorkomen dat een speler in een seizoen geen uitslag heeft.

Iemand enig idee hoe ik dit het best zou kunnen aanroepen en verwerken in php?

SELECT * FROM speler
JOIN uitslagen AS u ON s.id = u.uitslag_speler
WHERE uitslag_wedstrijd_id = 1
ORDER BY uitslag_positie


Een speler bestaat uit id, naam
Een uitslag bestaat uit uitslag_wedstrijd_id, uitslag_speler, uitslag_positie en seizoen.

Dat ga ik eens even zorgvuldig bekijken. Enorm bedankt voor de hulp!
Een andere benadering is om de crosstab in PHP te verwerken:

<?php
$sql = 'SELECT p.id, p.naam,
	s.seizoen, MAX(u.uitslag_positie) max_pos
	COUNT(u.uitslag_speler) gespeeld
FROM spelers p
CROSS JOIN
	(
	SELECT DISTINCT seizoen
	FROM uitslagen
	) s
LEFT JOIN uitlsagen u
	ON p.id = u.uitslag_speler AND s.seizoen = u.seizoen
GROUP BY p.id, p.naam, s.zeizoen
ORDER BY p.id, s.seizoen DESC';

if (false != $result = mysqli_query($con, $sql))
{
	$cur_player = -1;
	$players = array();
	while ($row = mysqli_fetch_assoc($result))
	{
		if ($row['id'] != $cur_player)
		{
			$cur_player = $row['id'];
			$players[$cur_player] = array('naam' => $row['naam'],
										   'resultaten' => array(),);
		}
		$players[$cur_player]['resultaten'][$row['seizoen']] =
				array('max_pos' => $row['max_pos'],
					  'gespeeld' => $row['gespeeld'],);
	}
	mysqli_free_result($result);
	$seasons = array_keys($players[$cur_player]['resultaten']);
	?>
    <table>
    	<thead>
        	<tr>
            	<th>Id</th>
                <th>Naam</th>
				<th><?php echo implode('</th><th>', $seasons); ?></th>
            </tr>
       </thead>
    	<tbody>
        <?php
			foreach ($players as $id => $player)
			{ ?>
        <tr>
        	<td><?php echo $id; ?></td>
        	<td><?php echo $player['naam']; ?></td>
            <?php
				foreach ($seasons as $season)
				{ 
					$s = $player['resultaten'][$season]['gespeeld'] != 0 ? $player['resultaten'][$season]['gespeeld']
						 . ' - ' . $player['resultaten'][$season]['max_pos'] : '&nbsp;'; 
			?>
            <td><?php echo $s; ?></td>
            <?php
				}
			?>
       </tr>
       <?php
			}
		
}
else
{
	// wat dan ook
}
?>


Vanwege de cross join krijgt elke speler elk seizoen toekend. Wil je alleen bepaalde seizoenen plaats je een WHERE in de subquery van de cross join.

Reageren