From 1f147081e1ed266d1b78e4e7374963cb4f2157f3 Mon Sep 17 00:00:00 2001 From: Marvin Flock Date: Tue, 23 Sep 2025 18:18:24 +0200 Subject: [PATCH 1/2] fix: add removed part back to sportsmanager --- .../components/com_sportsmanager/sportsmanager.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 4583fd9..359e1af 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -4831,6 +4831,13 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie . "\n INNER JOIN #__sportsmanager_rangliste_turnierdisziplin USING (turnierdisziplin_id)" . "\n INNER JOIN #__sportsmanager_rangliste USING (rangliste_id)" . "\n WHERE spieler_id = $geaenderte_spieler_id AND rundenstufe = 0"; + } else if ($berechnungen_auswerten) { + $session_id = redirectRequestGetSessionId(); + $query = "SELECT DISTINCT #__sportsmanager_rangliste.*" + . "\n FROM #__sportsmanager_berechnung" + . "\n INNER JOIN #__sportsmanager_rangliste ON id = rangliste_id" + . "\n WHERE typ = 'rangliste' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")); + $berechnungen = loadObjectList($db, $query); } else if ($geaenderte_rangliste_id != 0) { $query = "SELECT * FROM #__sportsmanager_rangliste" . "\n WHERE rangliste_id = $geaenderte_rangliste_id"; From d0258d967d69e651a9c0eb0118e880b4fd02e8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Meyer?= Date: Wed, 24 Sep 2025 09:44:11 +0200 Subject: [PATCH 2/2] Optimierung Inserts fuer Aktualisierung Ranglisten --- .../com_sportsmanager/sportsmanager.php | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/structure/components/com_sportsmanager/sportsmanager.php b/src/structure/components/com_sportsmanager/sportsmanager.php index 359e1af..9aeb6f0 100644 --- a/src/structure/components/com_sportsmanager/sportsmanager.php +++ b/src/structure/components/com_sportsmanager/sportsmanager.php @@ -4822,7 +4822,6 @@ function teamstatistikAktualisieren($geaenderte_veranstaltung_id = 0, $geaendert function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnierdisziplin_id = 0, $geaenderte_spieler_id = 0, $berechnungen_auswerten = FALSE): void { $db = getDatabase(); - if ($geaenderte_spieler_id != 0) { $query = "SELECT DISTINCT #__sportsmanager_rangliste.*" . "\n FROM #__sportsmanager_turniermeldung_spieler" @@ -4837,7 +4836,6 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie . "\n FROM #__sportsmanager_berechnung" . "\n INNER JOIN #__sportsmanager_rangliste ON id = rangliste_id" . "\n WHERE typ = 'rangliste' AND " . (empty($session_id) ? ("session_id < SUBTIME(NOW(), '00:10:00')") : ("session_id = '" . $session_id . "'")); - $berechnungen = loadObjectList($db, $query); } else if ($geaenderte_rangliste_id != 0) { $query = "SELECT * FROM #__sportsmanager_rangliste" . "\n WHERE rangliste_id = $geaenderte_rangliste_id"; @@ -4939,6 +4937,8 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie $db->transactionStart(); $meldungen = array(); + $Anzahl = 0; + $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin_punkte (rangliste_id, spieler_id, turnierdisziplin_id, platz, punkte) VALUES "; foreach ($turnierplatzierungen as $index => $turnierplatzierung) { if (empty($turnierplatzierung->spieler_id)) continue; @@ -5030,12 +5030,17 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie } } $punkte[$turnierplatzierung->spieler_id][] = $p; - $query = "INSERT INTO #__sportsmanager_rangliste_turnierdisziplin_punkte (rangliste_id, spieler_id, turnierdisziplin_id, platz, punkte) VALUES ('$rangliste_id', '$turnierplatzierung->spieler_id', '$turnierdisziplin->turnierdisziplin_id', '$turnierplatzierung->platz', '$p') ON DUPLICATE KEY UPDATE punkte = punkte + VALUES(punkte);"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } + if ($Anzahl > 0) $query .= ","; + $query .= "('$rangliste_id', '$turnierplatzierung->spieler_id', '$turnierdisziplin->turnierdisziplin_id', '$turnierplatzierung->platz', '$p')"; + $Anzahl++; } + $query .= " ON DUPLICATE KEY UPDATE punkte = punkte + VALUES(punkte);"; + if ($Anzahl > 0){ + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } $db->transactionCommit(); } @@ -5056,22 +5061,26 @@ function ranglisteAktualisieren($geaenderte_rangliste_id = 0, $geaenderte_turnie $platz = 1; $tatsaechlicher_platz = 1; $spieler_punkte = 0; - + $Anzahl = 0; $db->transactionStart(); + $query = "INSERT INTO #__sportsmanager_rangliste_punkte(rangliste_id, spieler_id, punkte, teilnahmen, platz) VALUES "; foreach ($punkte_summe as $spieler_id => $spieler_punkte_summe) { $spieler_teilnahmen = $teilnahmen[$spieler_id]; if ($platz == 1 || $spieler_punkte != $spieler_punkte_summe) $tatsaechlicher_platz = $platz; - - $query = "INSERT INTO #__sportsmanager_rangliste_punkte (rangliste_id, spieler_id, punkte, teilnahmen, platz) VALUES ('$rangliste_id', '$spieler_id', '$spieler_punkte_summe', '$spieler_teilnahmen', '$tatsaechlicher_platz') ON DUPLICATE KEY UPDATE punkte = VALUES(punkte), teilnahmen = VALUES(teilnahmen), platz = VALUES(platz);"; - $db->setQuery($query); - if (!$db->execute()) { - die($db->stderr(true)); - } - + if ($Anzahl > 0) $query .= ","; + $query .= "('$rangliste_id', '$spieler_id', '$spieler_punkte_summe', '$spieler_teilnahmen', '$tatsaechlicher_platz') "; + $Anzahl++; $spieler_punkte = $spieler_punkte_summe; $platz++; } + $query .= " ON DUPLICATE KEY UPDATE punkte = VALUES(punkte), teilnahmen = VALUES(teilnahmen), platz = VALUES(platz);"; + if ($Anzahl > 0){ + $db->setQuery($query); + if (!$db->execute()) { + die($db->stderr(true)); + } + } $db->transactionCommit(); // Unabhängig von $berechnungen_auswerten ausführen, um ggf. vorhandene Inhalte zu entfernen