Я пытался найти что-то в этой теме, и я не могу ничего найти, здесь было несколько вопросов, но они не работали для моего конкретного проекта.
Я задал аналогичный вопрос об обновлении таблицы, но не собираюсь работать для того, что я на самом деле хочу здесь, это список результатов.
-------------------------------------------------------- |id | hometeam |goalsfor|goalsagainst| awayteam | -------------------------------------------------------- | 1 |Inter Milan | 3 | 1 | FC Barcelona | -------------------------------------------------------- | 2 |FC Barcelona | 1 | 0 | Inter Milan | -------------------------------------------------------- | 3 |Inter Milan | 4 | 0 | AC Milan | -------------------------------------------------------- | 4 |AC Milan | 0 | 2 | Inter Milan | -------------------------------------------------------- | 5 |Real Madrid | 2 | 0 | AC Milan | -------------------------------------------------------- | 6 |AC Milan | 2 | 2 | Real Madrid | -------------------------------------------------------- | 7 |FC Barcelona | 2 | 2 | AC Milan | -------------------------------------------------------- | 8 |Real Madrid | 2 | 0 | Inter Milan | -------------------------------------------------------- | 9 |Inter Milan | 3 | 1 | Real Madrid | -------------------------------------------------------- | 10 |FC Barcelona | 2 | 0 | Real Madrid | -------------------------------------------------------- | 11 |Real Madrid | 1 | 1 | FC Barcelona | --------------------------------------------------------
В принципе, я хочу создать таблицу турнирной таблицы, упорядочивая команды, я хочу представить эту таблицу «на лету» и не поместить ее в базу данных
Pos Team Pld WDLFA GD Pts 1 FC Barcelona 5 2 3 0 8 5 3 9 2 Inter Milan 6 2 2 2 11 10 1 8 3 Real Madrid 6 2 2 2 8 8 0 8 4 AC Milan 5 0 3 2 8 12 -4 3
POS = Позиция W = выиграна D = Ничья L = Потеря F = Достигнутые цели Для A = Цели, забитые против GD = Разница мячей Pts = Очки
Я думаю, что наиболее эффективным способом сделать это было бы присвоение выигрышей, ничьих и потерь, суммирование забитых мячей и забитых голов, а также повторение данных – расчет общего количества игр и очков.
Но как бы я назначил выигрыши ничьих или потерь? И вычислить забитые мячи и цели против?
Сначала объедините таблицу баллов вместе, обменивая hometeam с awayteam и заменяя счет цели. Это дает вам некоторые исходные данные, которые легко агрегируются, и запрос на создание карточки счета выглядит примерно так:
select team, count(*) played, count(case when goalsfor > goalsagainst then 1 end) wins, count(case when goalsagainst> goalsfor then 1 end) lost, count(case when goalsfor = goalsagainst then 1 end) draws, sum(goalsfor) goalsfor, sum(goalsagainst) goalsagainst, sum(goalsfor) - sum(goalsagainst) goal_diff, sum( case when goalsfor > goalsagainst then 3 else 0 end + case when goalsfor = goalsagainst then 1 else 0 end ) score from ( select hometeam team, goalsfor, goalsagainst from scores union all select awayteam, goalsagainst, goalsfor from scores ) a group by team order by score desc, goal_diff desc;
// connection stuff $sql = 'select * from matchesTable'; $result = mysql_query($sql) $standings = array (); $standingTemplate = array ('matches' => 0, 'wins' => 0, 'draws' => 0, 'losses' => 0, 'goalsfor' => 0, 'goalsagainst' => 0, 'goalsdiff' => 0, 'points' => 0); while ($row = mysql_fetch_assoc($result)) { handleMatch($row['hometeam'], $row['goalsfor'], $row['goalsagainst']); handleMatch($row['awayteam'], $row['goalsfor'], $row['goalsagainst']); print_r( usort(standings, 'comparePoints') ); // up to you to format the output as you like } function handleMatch($team, $goalsfor, $goalsagainst) { global $standings, $standingTemplate; if ($goalsfor > $goalsagainst) { $points = 3; $win = 1; $draw = 0; $loss = 0; } elsif ($goalsfor == $goalsagainst) { $points = 1; $win = 0; $draw = 1; $loss = 0; } else { $points = 0 $win = 0; $draw = 0; $loss = 1; } if ( empty($standings[$team]) )$standing = $standingTemplate; else $standing = $standings[$team]; $standing['matches']++; $standing['wins'] += $win; $standing['draws'] += $draw; $standing['losses'] += $loss; $standing['goalsfor'] += $goalsfor; $standing['goalsagainst'] += $goalsagainst; $standing['goalsdiff'] += $goalsfor - $goalsagainst; $standing['points'] += $points; $standings[$team] = $standing; } function comparePoints($a, $b) { if ($a['points'] == $b['points']) { if ($a['goalsdiff'] == $b['goalsdiff']) return 0; return ($a['goalsdiff'] < $b['goalsdiff']) ? 1 : -1 ; } return ($a['points'] < $b['points']) ? 1 : -1 ; }
ПРИМЕЧАНИЯ : я не тестировал его и все, может быть, небольшая ошибка (некоторые $
или ;
отсутствуют).