Saetze redundant mitfuehren: vier Spalten, noch von niemandem gelesen

Sven 2026-09-11: "ergaenze in #__sportsmanager_team ausserdem saetze_gewonnen und
saetze_verloren an geeigneter Stelle und zaehle diese auch redundant geeignet mit.
Analog in #__sportsmanager_teamspiel teamspiel_heim_saetze_gewonnen und
teamspiel_gast_saetze_gewonnen, die ebenfalls passend gesetzt werden, wenn auch noch
nicht verwendet fuer die Auswertungen."

Die Zahl steht damit dort, wo sie draufsteht: teamspiel_*_punkte ist polymorph (Tore
bei "Einer" und im Race, gewonnene Saetze bei "Mehrere"), die neuen Spalten sind es
nicht. NULL heisst wie bei den Toren "gibt es hier nicht": unter "Einer" und im Race
kennt das Modell keine Saetze, dort tragen tore_gewonnen/-verloren.

Geschrieben an denselben drei Stellen wie die Tore: Spielbericht speichern,
begegnungenAktualisieren(), Teamstatistik. Gemessen: alle Modi und Begegnungen aller
Pruefwettbewerbe vor und nach der Aenderung neu gespeichert und abgezogen — Datenbank
und Frontend Byte fuer Byte identisch.
This commit is contained in:
svennickel
2026-09-11 23:20:35 +02:00
parent 983083d761
commit c8d66e4611
5 changed files with 51 additions and 5 deletions
@@ -11300,6 +11300,10 @@ function adminSaveBegegnungSpielplan(): void
$spiel_saetze_remis = saetzeRemisFuerSpiel(
$teamspiel_modus->punktetyp, $teamspiel_modus->satzergebnisse ?? 0,
$spiel_ergebnis_detailliert);
list($spiel_heim_saetze_gewonnen, $spiel_gast_saetze_gewonnen) =
saetzeGewonnenFuerSpiel($teamspiel_modus->punktetyp,
$spiel_heim_punkte, $spiel_gast_punkte);
if ($spiel_saetze_remis === null || $total_saetze_remis === null) {
$total_saetze_remis = null;
} else {
@@ -11308,8 +11312,8 @@ function adminSaveBegegnungSpielplan(): void
if (!$skip_spiel) {
if (!isset($spiele_nummern[$spiel_nr])) {
$query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert, teamspiel_heim_tore, teamspiel_gast_tore, teamspiel_saetze_remis)"
. "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ", " . ($spiel_heim_tore === null ? "NULL, NULL" : "'$spiel_heim_tore', '$spiel_gast_tore'") . ", " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . ");";
$query = "INSERT INTO #__sportsmanager_teamspiel (begegnung_id, teamspiel_nummer, heim_spieler_1_id, heim_spieler_2_id, gast_spieler_1_id, gast_spieler_2_id, teamspiel_heim_punkte, teamspiel_gast_punkte, teamspiel_heim_spielpunkte, teamspiel_gast_spielpunkte, ergebnis_detailliert, teamspiel_heim_tore, teamspiel_gast_tore, teamspiel_saetze_remis, teamspiel_heim_saetze_gewonnen, teamspiel_gast_saetze_gewonnen)"
. "\n VALUES ('$id', '$spiel_nr', '$spiel_heim_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_heim_spieler_2_id'" : "NULL") . ", '$spiel_gast_spieler_1_id', " . ($spieltyp[0] == "D" ? "'$spiel_gast_spieler_2_id'" : "NULL") . ", '$spiel_heim_punkte', '$spiel_gast_punkte', '$spiel_heim_spielpunkte', '$spiel_gast_spielpunkte', " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ", " . ($spiel_heim_tore === null ? "NULL, NULL" : "'$spiel_heim_tore', '$spiel_gast_tore'") . ", " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . ", " . ($spiel_heim_saetze_gewonnen === null ? "NULL, NULL" : "'$spiel_heim_saetze_gewonnen', '$spiel_gast_saetze_gewonnen'") . ");";
} else {
$teamspiel_id = $spiele_nummern[$spiel_nr]->teamspiel_id;
$query = "UPDATE #__sportsmanager_teamspiel"
@@ -11324,7 +11328,9 @@ function adminSaveBegegnungSpielplan(): void
. "\n ergebnis_detailliert = " . (empty($ergebnis_detailliert) ? "null" : "'$ergebnis_detailliert'") . ","
. "\n teamspiel_heim_tore = " . ($spiel_heim_tore === null ? "NULL" : "'$spiel_heim_tore'") . ","
. "\n teamspiel_gast_tore = " . ($spiel_gast_tore === null ? "NULL" : "'$spiel_gast_tore'") . ","
. "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'")
. "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . ","
. "\n teamspiel_heim_saetze_gewonnen = " . ($spiel_heim_saetze_gewonnen === null ? "NULL" : "'$spiel_heim_saetze_gewonnen'") . ","
. "\n teamspiel_gast_saetze_gewonnen = " . ($spiel_gast_saetze_gewonnen === null ? "NULL" : "'$spiel_gast_saetze_gewonnen'")
. "\n WHERE teamspiel_id = $teamspiel_id";
}
$db->setQuery($query);
@@ -5872,6 +5872,16 @@ function updateDatabase(): void
}
}
if (!array_key_exists('teamspiel_heim_saetze_gewonnen', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_teamspiel`"
. "\n ADD `teamspiel_heim_saetze_gewonnen` SMALLINT(6) NULL DEFAULT NULL AFTER `teamspiel_saetze_remis`,"
. "\n ADD `teamspiel_gast_saetze_gewonnen` SMALLINT(6) NULL DEFAULT NULL AFTER `teamspiel_heim_saetze_gewonnen`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$columns = $db->getTableColumns('#__sportsmanager_begegnung');
if (!array_key_exists('heim_tore', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_begegnung`"
@@ -5914,6 +5924,16 @@ function updateDatabase(): void
}
}
if (!array_key_exists('saetze_gewonnen', $columns)) {
$query = "ALTER TABLE `#__sportsmanager_team`"
. "\n ADD `saetze_gewonnen` SMALLINT(6) NULL DEFAULT NULL AFTER `saetze_remis`,"
. "\n ADD `saetze_verloren` SMALLINT(6) NULL DEFAULT NULL AFTER `saetze_gewonnen`;";
$db->setQuery($query);
if (!$db->execute()) {
die($db->stderr(true));
}
}
$query = "UPDATE #__sportsmanager_einstellungen"
. "\n SET wert = '123'"
. "\n WHERE name = 'datenbank_version'";
@@ -5625,12 +5625,13 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
foreach ($veranstaltungen as $veranstaltung) {
if ($veranstaltung->tabellenwertung > 0) {
$query = "SELECT spielpunkte_wertung_einzel, spielpunkte_wertung_doppel"
$query = "SELECT spielpunkte_wertung_einzel, spielpunkte_wertung_doppel, punktetyp"
. "\n FROM #__sportsmanager_teamspiel_modus"
. "\n WHERE teamspiel_modus_id = " . (int)($veranstaltung->modus_id ?? 0);
$wertungen = loadObjectList($db, $query);
$je_satz = count($wertungen) > 0
&& jeSatzWertung($wertungen[0]->spielpunkte_wertung_einzel, $wertungen[0]->spielpunkte_wertung_doppel);
$saetze_bekannt = count($wertungen) > 0 && $wertungen[0]->punktetyp == 1;
$ausgetragen = function ($alias) use ($je_satz) {
return ausgetragenBedingung($je_satz, $alias);
};
@@ -5668,6 +5669,8 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert
. "\n #__sportsmanager_team.tore_differenz = werte.tore_gewonnen - werte.tore_verloren,"
. "\n #__sportsmanager_team.tore_quotient = IF(werte.tore_verloren = 0, -1, werte.tore_gewonnen / werte.tore_verloren),"
. "\n #__sportsmanager_team.saetze_remis = werte.saetze_remis,"
. "\n #__sportsmanager_team.saetze_gewonnen = " . ($saetze_bekannt ? "werte.punkte_gewonnen" : "NULL") . ","
. "\n #__sportsmanager_team.saetze_verloren = " . ($saetze_bekannt ? "werte.punkte_verloren" : "NULL") . ","
. "\n #__sportsmanager_team.buchholz1 = 0,"
. "\n #__sportsmanager_team.buchholz2 = 0"
. "\n WHERE veranstaltung_id = $veranstaltung->veranstaltung_id";
@@ -6254,6 +6257,10 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
$spiel_saetze_remis = saetzeRemisFuerSpiel(
$teamspiel_modus->punktetyp, $teamspiel_modus->satzergebnisse ?? 0,
$spiel->ergebnis_detailliert);
list($spiel_heim_saetze_gewonnen, $spiel_gast_saetze_gewonnen) =
saetzeGewonnenFuerSpiel($teamspiel_modus->punktetyp,
$spiel->teamspiel_heim_punkte, $spiel->teamspiel_gast_punkte);
if ($spiel_saetze_remis === null || $total_saetze_remis === null) {
$total_saetze_remis = null;
} else {
@@ -6265,7 +6272,9 @@ function begegnungenAktualisieren($geaendert_veranstaltung_id = 0, $geaendert_mo
. "\n teamspiel_gast_spielpunkte = '$spiel_gast_spielpunkte',"
. "\n teamspiel_heim_tore = " . ($spiel_heim_tore === null ? "NULL" : "'$spiel_heim_tore'") . ","
. "\n teamspiel_gast_tore = " . ($spiel_gast_tore === null ? "NULL" : "'$spiel_gast_tore'") . ","
. "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'")
. "\n teamspiel_saetze_remis = " . ($spiel_saetze_remis === null ? "NULL" : "'$spiel_saetze_remis'") . ","
. "\n teamspiel_heim_saetze_gewonnen = " . ($spiel_heim_saetze_gewonnen === null ? "NULL" : "'$spiel_heim_saetze_gewonnen'") . ","
. "\n teamspiel_gast_saetze_gewonnen = " . ($spiel_gast_saetze_gewonnen === null ? "NULL" : "'$spiel_gast_saetze_gewonnen'")
. "\n WHERE teamspiel_id = $spiel->teamspiel_id";
$db->setQuery($query);
if (!$db->execute()) {
@@ -679,6 +679,13 @@ function ergebnisVorhanden($je_satz, $heim_punkte, $gast_punkte, $heim_tore): bo
return $heim_punkte != null || $gast_punkte != null || ($je_satz && $heim_tore !== null);
}
function saetzeGewonnenFuerSpiel($punktetyp, $heim_punkte, $gast_punkte): array
{
if ($punktetyp != 1)
return array(null, null);
return array((int)$heim_punkte, (int)$gast_punkte);
}
function saetzeRemisFuerSpiel($punktetyp, $satzergebnisse, $ergebnis_detailliert): ?int
{
if ($punktetyp == 0 || empty($satzergebnisse) || empty($ergebnis_detailliert))
+4
View File
@@ -727,6 +727,8 @@ return new class () implements InstallerScriptInterface
. "\n `tore_differenz` smallint(6) DEFAULT NULL,"
. "\n `tore_quotient` float(8,2) DEFAULT NULL,"
. "\n `saetze_remis` smallint(6) DEFAULT NULL,"
. "\n `saetze_gewonnen` smallint(6) DEFAULT NULL,"
. "\n `saetze_verloren` smallint(6) DEFAULT NULL,"
. "\n `buchholz1` smallint(6) DEFAULT NULL,"
. "\n `buchholz2` smallint(6) DEFAULT NULL,"
. "\n PRIMARY KEY (`team_id`),"
@@ -787,6 +789,8 @@ return new class () implements InstallerScriptInterface
. "\n `teamspiel_heim_tore` smallint(6) DEFAULT NULL,"
. "\n `teamspiel_gast_tore` smallint(6) DEFAULT NULL,"
. "\n `teamspiel_saetze_remis` smallint(6) DEFAULT NULL,"
. "\n `teamspiel_heim_saetze_gewonnen` smallint(6) DEFAULT NULL,"
. "\n `teamspiel_gast_saetze_gewonnen` smallint(6) DEFAULT NULL,"
. "\n PRIMARY KEY (`teamspiel_id`),"
. "\n KEY `begegnung_id` (`begegnung_id`),"
. "\n KEY `heim_spieler_1_id` (`heim_spieler_1_id`),"