DreamPromise hat geschrieben:Moin moin
ich hab nur die SQL von deiner Seite kopiert und in meine Tabelle (mysqladmin) eingepflegt...
Mehr nicht.
Welche SQL?
Die SQL für die komplette Liga? Dann wird der Modus überschrieben. Dort ist nicht Tippabgabe bis zum jeweiligen Spielbeginn eingestellt.
Die SQL für die neuen Spieltermine? Dadurch wurden eventuell die Freitags-Spiele festgesetzt. Vorher waren alle Spiel am Samstag 15:30 Uhr.
Dann gilt was ich oben schon gesagt habe: Der Abgabetermin im Spieltag wird nicht neu berechnet und bleibt auf Samstag 15:30 Uhr stehen, und somit wird das Spiel am Freitag nicht geschlossen.
Hiermit kannst du überprüfen, welche Abgabetermine fehlerhaft sind:
Code: Alles auswählen
SELECT m.season, m.league, m.matchday, min(m.match_datetime) as new_delivery_date, md.matchday_name, md.matches, md.delivery_date
FROM phpbb_footb_matches as m
JOIN phpbb_footb_leagues AS l ON (l.season = m.season AND l.league = m.league)
JOIN phpbb_footb_matchdays AS md ON (md.season = m.season AND md.league = m.league AND md.matchday = m.matchday)
WHERE l.bet_in_time = 1 and m.status=0 GROUP BY m.season, m.league, m.matchday
HAVING new_delivery_date <> md.delivery_date
Alle zukünftigen Abgabetermin auf den nächsten Spieltermin setzen:
Um zu Überprüfen, welche Werte gesetzt werden sollen, kannst du zuerst den zweiten Teil des Updates abschicken:
Code: Alles auswählen
SELECT m.season, m.league, m.matchday, min(m.match_datetime) as delivery_date, md.matchday_name, md.matches
FROM phpbb_footb_matches as m
JOIN phpbb_footb_leagues AS l ON (l.season = m.season AND l.league = m.league)
JOIN phpbb_footb_matchdays AS md ON (md.season = m.season AND md.league = m.league AND md.matchday = m.matchday)
WHERE l.bet_in_time = 1 and m.status=0 GROUP BY m.season, m.league, m.matchday
Bei dieser Abfrage kommen natürlich alle zukünftigen Spieltage heraus. Mit dem folgenden Update werden diese Spieltage aktualisert bzw. neu überschrieben.
Da mit REPLACE der Satz zuerst gelöscht wird und dann neu angelegt wird, zeigt dir phpmysql die doppelte Anzahl der betroffenen Datensätze an.
In der Replace-Anweisung habe ich nicht alle Spalten der Tabelle footb_matchdays aufgeführt. Das Feld status wird mit default 0 und die beiden anderen Abgabetermine mit default "" gefüllt, was in diesem Fall richtig sein sollte.
Code: Alles auswählen
REPLACE INTO phpbb_footb_matchdays (season, league, matchday, delivery_date, matchday_name, matches)
SELECT m.season, m.league, m.matchday, min(m.match_datetime) as delivery_date, md.matchday_name, md.matches
FROM phpbb_footb_matches as m
JOIN phpbb_footb_leagues AS l ON (l.season = m.season AND l.league = m.league)
JOIN phpbb_footb_matchdays AS md ON (md.season = m.season AND md.league = m.league AND md.matchday = m.matchday)
WHERE l.bet_in_time = 1 and m.status=0 GROUP BY m.season, m.league, m.matchday
Diese Abfrage sollte man, wenn man diesen Modus gewählt hat, nach dem Einspielen der Daten ausführen.
Ich werden mal überlegen wie ich diesen Befehl regelmäßig (aber nicht ständig) in der Tipprunde aufrufe und somit Fehlersituationen vermeide.