Door
mar kla
op 14-03-2013 13:08
gewijzigd op 14-03-2013 13:09
9.622 views
je ziet overal in de voetbalbladen van die mooie draaitabellen, wie weet een script om van dit
datum | gespeeld |thuis |uit |score
zo 23-09-2012 12:30 Y 06 ADO AJA 1-1
za 10-11-2012 19:45 Y 12 ADO AZA 2-2
zo 05-05-2013 12:30 N 33 ADO FEY 0-0
zo 12-08-2012 16:30 Y 01 AJA AZA 2-2
zo 20-01-2013 14:30 Y 19 AJA FEY 3-0
zo 24-02-2013 14:30 Y 24 AJA ADO 1-1
zo 25-11-2012 14:30 Y 14 AZA FEY 0-2
za 09-03-2013 20:45 Y 26 AZA ADO 1-1
zo 17-03-2013 16:30 N 27 AZA AJA 0-0
zo 28-10-2012 12:30 Y 10 FEY AJA 2-2
zo 16-12-2012 14:30 Y 17 FEY ADO 3-2
zo 10-02-2013 14:30 Y 22 FEY AZA 3-1
een draaitabel /pivot tabel te maken zoals dit:
xxx|ado|aja|aza|fey|
___|___|___|___|___|_
ado| X |1-1|2-2| - |
___|___|___|___|___|_
aja|1-1| X |2-2|2-0|
___|___|___|___|___|_
aza|1-1| - | X |0-2|
___|___|___|___|___|_
fey|3-2|2-2|3-1| X |
___|___|___|___|___|_
Ik heb al lopen zoek maar kan het helaas geen gode oplossng vinden
Misschien moet ik iets met een array doen, waarmee ik per thuisteam een regel maak. Maar ik kom er dus niet uit :-(
Dat met de $pdo ($pdo = new PDO(....)) snap ik even niet. zou je dat wat meer kunnen uitleggen=
De seizoen_id (109) staat inderdaad niet in de teams, want teams kunnen namelijk in meerdere seizoenen aanwezig zijn, maar in de cs_wedstrijden want een wedstrijd zal altijd in één seizoen voorkomen.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=xxxxxx;charset=utf8', 'wortel', 'willie');
?>
Ik begrijp dat je het seizoen niet in de teams heb staan, maar hoe bepaal je dan de indeling per seizoen?.
Zoals gezegd, ik zelf heb daar een tabel voor gemaakt (teams_by_season).
de indeling per siezoen wordt bepaald door de volgende gegevens
cs_wedstrijden_id (oplopend uniek volgnummer, heeft denk ik verder geen verklaring nodig)
cs_wedstrijd_gespeeld (Y of N om te bepalen al gespeeld is of nog gespeeld moet worden)
per seizoen zijn er 306 wedstrijd (18 teams die tegen elkaar spelen behalbve tegen zichzelf)
cs_season_id ((geeft aan in welk seizoen de wedstrijd gespeeld is)
cs_wedstrijden_speelronde (geeft aan welk in speelronde de onderlinge ontmoeting was)
cs_wedstrijden_datum (speekt voor zich)
cs_team_id_thuis (bevat de ID van de teams uit de table teams)
cs_team_id_uit (bevat de ID van de teams uit de table teams)
cs_doelthuis (speekt voor zich)
cs_doeluit(speekt voor zich)
nu moet ik alleen nog het resultaat van mij query naar de Array
<?php
SELECT
m1.cs_wedstrijden_id,
date_format(m1.cs_wedstrijden_datum, '%d/%m') as mDate,
m1.cs_team_id_thuis AS team1_id,
t1.TeamName_Short AS team1_name,
m1.cs_team_id_uit AS team2_id,
t2.TeamName_Short AS team2_name,
CASE m1.cs_wedstrijd_gespeeld
WHEN 'Y' THEN CONCAT(m1.cs_doelthuis, ' - ', m1.cs_doeluit)
WHEN 'N' THEN date_format(m1.cs_wedstrijden_datum, '%d/%m')
ELSE 'X' END uitslag
FROM
cs_wedstrijden m1, af_teams t1, af_teams t2
WHERE
cs_season_id =110
AND
t1.Team_ID = cs_team_id_thuis
AND
t2.Team_ID = cs_team_id_uit
ORDER by t1.TeamName_Short , t2.TeamName_Short
?>
PHP Notice: Undefined variable: kruistabel in new1.php on line 153
PHP Fatal error: Call to a member function renderTable() on a non-object in new1.php on line 153
<?php
$pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8;user='ikke';password='blabla'");
$stmt = $pdo->query("SELECT
m1.cs_wedstrijden_id,
date_format(m1.cs_wedstrijden_datum, '%d/%m') as mDate,
m1.cs_team_id_thuis AS team1_id,
t1.TeamName_Short AS team1_name,
m1.cs_team_id_uit AS team2_id,
t2.TeamName_Short AS team2_name,
CASE m1.cs_wedstrijd_gespeeld
WHEN 'Y' THEN CONCAT(m1.cs_doelthuis, ' - ', m1.cs_doeluit)
WHEN 'N' THEN date_format(m1.cs_wedstrijden_datum, '%d/%m')
ELSE 'X' END uitslag
FROM
cs_wedstrijden m1, af_teams t1, af_teams t2
WHERE
cs_season_id =110
AND
t1.Team_ID = cs_team_id_thuis
AND
t2.Team_ID = cs_team_id_uit
ORDER by t1.TeamName_Short , t2.TeamName_Short") or die(mysql_error());
while ($records = $stmt->fetchAll(PDO::FETCH_ASSOC))
{
class kruistabel
{
private $records;
private $teams;
private $table;
// constructor, wordt automatisch uitgevoerd.
function __construct($records)
{
$this->records = $records;
$this->makeTeamsArray();
$this->makeTableArray();
}
// verkrijg een array met de namen van de teams
public function getTeamNames()
{
return array_values($this->teams);
}
// verkrijg de complete kruistabel
public function renderTable()
{
$html = '<table>';
// filter alle teams uit de wedstrijden en stop ze in een array
// hierbij komt elk team maar één keer in de array
private function makeTeamsArray()
{
$this->teams = array();
// maak een 2D array met de inhoud voor de tabel
private function makeTableArray()
{
$this->table = array();
$this->table[] = array_merge(array(''), $this->teams);
foreach($this->teams as $id1 => $team1)
{
$row = array();
// deze functie zoekt naar wedstrijden tussen team A en team B
// hierbij maakt het niet uit of de volgorde A-B of B-A is
private function findMatch($id1, $id2)
{
foreach($this->records as $key => $match)
{
if(($match['team1_id'] == $id1 && $match['team2_id'] == $id2) || ($match['team1_id'] == $id2 && $match['team2_id'] == $id1))
{
return $key;
}
}
return NULL;
}
}