Abfragen optimiert

This commit is contained in:
Jürgen Meyer
2025-12-30 18:53:44 +01:00
parent 7253426b51
commit f76f1185f5
4 changed files with 147 additions and 124 deletions
@@ -4566,69 +4566,79 @@ function adminSpielverlegungen(): void
if (empty($filter_status))
$filter_status = "offen,genehmigt,abgelehnt";
$query = "SELECT"
. "\n t1.begegnung_id, t1.beantragt, t1.Begruendung AS Begruendung_beantragt, t1.Termin_alt,"
. "\n t2.genehmigt, t2.Termin_neu, t2.Begruendung AS Begruendung_genehmigt,"
. "\n t3.abgelehnt, t3.Begruendung AS Begruendung_abgelehnt,"
. "\n t5.teamname AS Heim, t6.teamname AS Gast, t7.bezeichnung AS Liga, t8.teamname AS beantragt_von,"
// Ermittlung Status
. "\n CASE"
. "\n WHEN t3.abgelehnt IS NOT NULL AND (t2.genehmigt IS NULL OR t3.abgelehnt > t2.genehmigt)"
. "\n THEN 'abgelehnt'"
. "\n WHEN t2.genehmigt IS NOT NULL"
. "\n THEN 'genehmigt'"
. "\n ELSE 'offen'"
. "\n END AS status"
// Beantragt
. "\n FROM ("
. "\n SELECT begegnung_id,"
. "\n MIN(eingetragen) AS beantragt,"
. "\n MIN(zeitpunkt) AS Termin_alt,"
. "\n MAX(kommentar) AS Begruendung,"
. "\n MAX(team_id) AS team_id"
. "\n FROM #__sportsmanager_begegnung_historie"
. "\n WHERE aktion IN (2,3)"
. "\n GROUP BY begegnung_id"
. "\n ) AS t1"
// Genehmigt
. "\n LEFT JOIN ("
. "\n SELECT begegnung_id,"
. "\n MAX(eingetragen) AS genehmigt,"
. "\n MAX(zeitpunkt) AS Termin_neu,"
. "\n MAX(kommentar) AS Begruendung"
. "\n FROM #__sportsmanager_begegnung_historie"
. "\n WHERE aktion = 1"
. "\n GROUP BY begegnung_id"
. "\n ) AS t2 ON t2.begegnung_id = t1.begegnung_id"
// Abgelehnt
. "\n LEFT JOIN ("
. "\n SELECT begegnung_id,"
. "\n MAX(eingetragen) AS abgelehnt,"
. "\n MAX(kommentar) AS Begruendung"
. "\n FROM #__sportsmanager_begegnung_historie"
. "\n WHERE aktion = 10"
. "\n GROUP BY begegnung_id"
. "\n ) AS t3 ON t3.begegnung_id = t1.begegnung_id"
// Sonstige Infos
. "\n LEFT JOIN #__sportsmanager_begegnung AS t4 ON t4.begegnung_id = t1.begegnung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t5 ON t5.team_id = t4.heim_team_id"
. "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t4.gast_team_id"
. "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t7.veranstaltung_id = t5.veranstaltung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t8 ON t8.team_id = t1.team_id"
// Filter
. "\n WHERE t7.saison_id = '$filter_saison_id'"
. "\n " . kategorieFilter("AND t7.kategorie IN")
. "\n HAVING status in ('" . str_replace(",", "','", $filter_status) . "')"
. "\n ORDER BY t1.beantragt DESC;";
$query = "SELECT t1.begegnung_historie_id AS beantragt_id, t1.begegnung_id AS begegnung_id,"
. "\n t1.eingetragen AS beantragt, t1.kommentar AS Begruendung_beantragt, t1.zeitpunkt AS Termin_alt,"
. "\n t1.team_id as beantragt_verein, t5.bezeichnung AS Liga,"
. "\n t3.teamname AS Heim, t4.teamname AS Gast, t6.teamname AS beantragt_von, 'offen' AS status"
. "\n FROM #__sportsmanager_begegnung_historie AS t1"
. "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id"
. "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id"
. "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t1.team_id"
. "\n WHERE t1.aktion = 2"
. "\n AND t5.saison_id = '$filter_saison_id'"
. "\n ORDER BY t1.begegnung_id, t1.zeitpunkt ASC;";
$spielverlegungen = loadObjectList($db, $query);
$last_id = "";
foreach ($spielverlegungen as $key => $spielverlegung) {
if ($spielverlegung->begegnung_id == $last_id) {
unset($spielverlegungen[$key]);
} else {
$last_id = $spielverlegung->begegnung_id;
$query = "SELECT t1.begegnung_historie_id AS genehmigt_id, t1.eingetragen AS genehmigt,"
. "\n t1.user_id AS genehmigt_von, t1.team_id as genehmigt_verein, t1.zeitpunkt AS Termin_neu"
. "\n FROM #__sportsmanager_begegnung_historie AS t1"
. "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id"
. "\n WHERE t1.aktion = 1 AND t1.begegnung_id = $last_id"
. "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;";
$genehmigt = loadObjectList($db, $query);
if (!empty($genehmigt)) {
$spielverlegung->genehmigt_id = $genehmigt[0]->genehmigt_id;
$spielverlegung->genehmigt = $genehmigt[0]->genehmigt;
$spielverlegung->Termin_neu = $genehmigt[0]->Termin_neu;
$spielverlegung->genehmigt_von = $genehmigt[0]->genehmigt_von;
$spielverlegung->genehmigt_verein = $genehmigt[0]->genehmigt_verein;
$spielverlegung->status = "genehmigt";
} else {
$spielverlegung->genehmigt_id = "";
$spielverlegung->genehmigt = "";
$spielverlegung->Termin_neu = "";
$spielverlegung->genehmigt_von = "";
$spielverlegung->genehmigt_verein = "";
}
$query = "SELECT t1.begegnung_historie_id AS abgelehnt_id, t1.eingetragen AS abgelehnt,"
. "\n t1.user_id AS abgelehnt_von, t1.team_id as abgelehnt_verein,"
. "\n t1.kommentar AS Begruendung_abgelehnt"
. "\n FROM #__sportsmanager_begegnung_historie AS t1"
. "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id"
. "\n WHERE t1.aktion = 10 AND t1.begegnung_id = $last_id"
. "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;";
$abgelehnt = loadObjectList($db, $query);
if (!empty($abgelehnt)) {
$spielverlegung->abgelehnt_id = $abgelehnt[0]->abgelehnt_id;
$spielverlegung->abgelehnt = $abgelehnt[0]->abgelehnt;
$spielverlegung->abgelehnt_von = $abgelehnt[0]->abgelehnt_von;
$spielverlegung->abgelehnt_verein = $abgelehnt[0]->abgelehnt_verein;
$spielverlegung->Begruendung_abgelehnt = $abgelehnt[0]->Begruendung_abgelehnt;
$spielverlegung->status = "abgelehnt";
} else {
$spielverlegung->abgelehnt_id = "";
$spielverlegung->abgelehnt = "";
$spielverlegung->abgelehnt_von = "";
$spielverlegung->abgelehnt_verein = "";
$spielverlegung->Begruendung_abgelehnt = "";
}
}
}
HTML_sportsmanager_admin::adminSpielverlegungen($spielverlegungen,$saisons,$filter_saison_id);
}
@@ -4118,69 +4118,82 @@ function spielverlegungen(): void
$saisons = loadObjectList($db, $query);
$filter_saison_id = $saisons[0]->saison_id;
$query = "SELECT"
. "\n t1.begegnung_id, t1.beantragt, t1.Begruendung AS Begruendung_beantragt, t1.Termin_alt,"
. "\n t2.genehmigt, t2.Termin_neu, t2.Begruendung AS Begruendung_genehmigt,"
. "\n t3.abgelehnt, t3.Begruendung AS Begruendung_abgelehnt,"
. "\n t5.teamname AS Heim, t6.teamname AS Gast, t7.bezeichnung AS Liga, t8.teamname AS beantragt_von,"
// Ermittlung Status
. "\n CASE"
. "\n WHEN t3.abgelehnt IS NOT NULL AND (t2.genehmigt IS NULL OR t3.abgelehnt > t2.genehmigt)"
. "\n THEN 'abgelehnt'"
. "\n WHEN t2.genehmigt IS NOT NULL"
. "\n THEN 'genehmigt'"
. "\n ELSE 'offen'"
. "\n END AS status"
// Beantragt
. "\n FROM ("
. "\n SELECT begegnung_id,"
. "\n MIN(eingetragen) AS beantragt,"
. "\n MIN(zeitpunkt) AS Termin_alt,"
. "\n MAX(kommentar) AS Begruendung,"
. "\n MAX(team_id) AS team_id"
. "\n FROM #__sportsmanager_begegnung_historie"
. "\n WHERE aktion IN (2,3)"
. "\n GROUP BY begegnung_id"
. "\n ) AS t1"
// Genehmigt
. "\n LEFT JOIN ("
. "\n SELECT begegnung_id,"
. "\n MAX(eingetragen) AS genehmigt,"
. "\n MAX(zeitpunkt) AS Termin_neu,"
. "\n MAX(kommentar) AS Begruendung"
. "\n FROM #__sportsmanager_begegnung_historie"
. "\n WHERE aktion = 1"
. "\n GROUP BY begegnung_id"
. "\n ) AS t2 ON t2.begegnung_id = t1.begegnung_id"
// Abgelehnt
. "\n LEFT JOIN ("
. "\n SELECT begegnung_id,"
. "\n MAX(eingetragen) AS abgelehnt,"
. "\n MAX(kommentar) AS Begruendung"
. "\n FROM #__sportsmanager_begegnung_historie"
. "\n WHERE aktion = 10"
. "\n GROUP BY begegnung_id"
. "\n ) AS t3 ON t3.begegnung_id = t1.begegnung_id"
// Sonstige Infos
. "\n LEFT JOIN #__sportsmanager_begegnung AS t4 ON t4.begegnung_id = t1.begegnung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t5 ON t5.team_id = t4.heim_team_id"
. "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t4.gast_team_id"
. "\n LEFT JOIN #__sportsmanager_veranstaltung AS t7 ON t7.veranstaltung_id = t5.veranstaltung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t8 ON t8.team_id = t1.team_id"
// Filter
. "\n WHERE t7.saison_id = '$filter_saison_id'"
. "\n " . kategorieFilter("AND t7.kategorie IN")
. "\n HAVING status in ('" . str_replace(",", "','", $filter_status) . "')"
. "\n ORDER BY t1.beantragt DESC;";
$query = "SELECT t1.begegnung_historie_id AS beantragt_id, t1.begegnung_id AS begegnung_id,"
. "\n t1.eingetragen AS beantragt, t1.kommentar AS Begruendung_beantragt, t1.zeitpunkt AS Termin_alt,"
. "\n t1.team_id as beantragt_verein, t5.bezeichnung AS Liga,"
. "\n t3.teamname AS Heim, t4.teamname AS Gast, t6.teamname AS beantragt_von, 'offen' AS status"
. "\n FROM #__sportsmanager_begegnung_historie AS t1"
. "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t3 ON t3.team_id = t2.heim_team_id"
. "\n LEFT JOIN #__sportsmanager_team AS t4 ON t4.team_id = t2.gast_team_id"
. "\n LEFT JOIN #__sportsmanager_veranstaltung AS t5 ON t5.veranstaltung_id = t4.veranstaltung_id"
. "\n LEFT JOIN #__sportsmanager_team AS t6 ON t6.team_id = t1.team_id"
. "\n WHERE t1.aktion = 2"
. "\n AND t5.saison_id = '$filter_saison_id'"
. kategorieFilter("AND t5.kategorie IN")
. "\n ORDER BY t1.begegnung_id, t1.zeitpunkt ASC;";
$spielverlegungen = loadObjectList($db, $query);
$last_id = "";
foreach ($spielverlegungen as $key => $spielverlegung) {
if ($spielverlegung->begegnung_id == $last_id) {
unset($spielverlegungen[$key]);
} else {
$last_id = $spielverlegung->begegnung_id;
$query = "SELECT t1.begegnung_historie_id AS genehmigt_id, t1.eingetragen AS genehmigt,"
. "\n t1.user_id AS genehmigt_von, t1.team_id as genehmigt_verein, t1.zeitpunkt AS Termin_neu"
. "\n FROM #__sportsmanager_begegnung_historie AS t1"
. "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id"
. "\n WHERE t1.aktion = 1 AND t1.begegnung_id = $last_id"
. "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;";
$genehmigt = loadObjectList($db, $query);
if (!empty($genehmigt)) {
$spielverlegung->genehmigt_id = $genehmigt[0]->genehmigt_id;
$spielverlegung->genehmigt = $genehmigt[0]->genehmigt;
$spielverlegung->Termin_neu = $genehmigt[0]->Termin_neu;
$spielverlegung->genehmigt_von = $genehmigt[0]->genehmigt_von;
$spielverlegung->genehmigt_verein = $genehmigt[0]->genehmigt_verein;
$spielverlegung->status = "genehmigt";
} else {
$spielverlegung->genehmigt_id = "";
$spielverlegung->genehmigt = "";
$spielverlegung->Termin_neu = "";
$spielverlegung->genehmigt_von = "";
$spielverlegung->genehmigt_verein = "";
}
$query = "SELECT t1.begegnung_historie_id AS abgelehnt_id, t1.eingetragen AS abgelehnt,"
. "\n t1.user_id AS abgelehnt_von, t1.team_id as abgelehnt_verein,"
. "\n t1.kommentar AS Begruendung_abgelehnt"
. "\n FROM #__sportsmanager_begegnung_historie AS t1"
. "\n LEFT JOIN #__sportsmanager_begegnung AS t2 ON t2.begegnung_id = t1.begegnung_id"
. "\n WHERE t1.aktion = 10 AND t1.begegnung_id = $last_id"
. "\n ORDER BY t1.zeitpunkt DESC LIMIT 1;";
$abgelehnt = loadObjectList($db, $query);
if (!empty($abgelehnt)) {
$spielverlegung->abgelehnt_id = $abgelehnt[0]->abgelehnt_id;
$spielverlegung->abgelehnt = $abgelehnt[0]->abgelehnt;
$spielverlegung->abgelehnt_von = $abgelehnt[0]->abgelehnt_von;
$spielverlegung->abgelehnt_verein = $abgelehnt[0]->abgelehnt_verein;
$spielverlegung->Begruendung_abgelehnt = $abgelehnt[0]->Begruendung_abgelehnt;
$spielverlegung->status = "abgelehnt";
} else {
$spielverlegung->abgelehnt_id = "";
$spielverlegung->abgelehnt = "";
$spielverlegung->abgelehnt_von = "";
$spielverlegung->abgelehnt_verein = "";
$spielverlegung->Begruendung_abgelehnt = "";
}
}
}
$spielverlegungen = array_values($spielverlegungen);
if (isJson()) {
echo json_encode($spielverlegungen);
} else {
@@ -3984,7 +3984,7 @@ static function spielverlegungen($titel, $beschreibung, $rows): void
?>
</td>
<td nowrap style='text-align: center;'>
<?php echo str_replace(" ", "<br>", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?>
<?php echo $row->Termin_neu == "" ? "" : str_replace(" ", "<br>", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?>
</td>
<td nowrap style='text-align: left;'>
<?php echo htmlentities_utf8($row->Begruendung_beantragt); ?>
@@ -7320,7 +7320,7 @@ class HTML_sportsmanager_admin
?>
</td>
<td nowrap style='text-align: center;'>
<?php echo str_replace(" ", "<br>", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?>
<?php echo $row->Termin_neu == "" ? "" : str_replace(" ", "<br>", date('d.m.Y h:i', strtotime($row->Termin_neu))); ?>
</td>
<td nowrap style='text-align: left;'>
<?php echo htmlentities_utf8($row->Begruendung_beantragt); ?>