php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.06.2011, 19:23  
Neuer Benutzer
 
Registriert seit: 22.06.2011
Beiträge: 9
PHP-Kenntnisse:
Anfänger
douse29 befindet sich auf einem aufstrebenden Ast
Standard MySQL: Siegesserie auswerten

Hallo,

ich habe div. mysql-tables wo Sportergebnisse gespeichert werden.
Jetzt möchte ich div. Statistiken auswerten, z.B. wie oft hat ein Verein hintereinander gewonnen (Siegesserie), leider scheitere ich komplett beim Versuch dies umzusetzen.

Hier die relevanten DB's:

eintraege:
id, datum

teams:
id, eintrags_id, teamname

spiele:
id, eintrags_id, team_heim_id, team_gast_id, tore_heim, tore_gast

D.h. ich muss zuerst die Spiele nach dem Eintrags-Datum sortieren und dort dann abfragen ob die letzten Spiele gewonnen wurden, nur wie lässt sich das realisieren? Evtl. mit eine Subselect? Nur wie ...

Gruß
douse29 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.06.2011, 19:26  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Wie wäre es mit GROUP BY und JOIN?

mfg Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 22.06.2011, 19:48  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Evtl. mit eine Subselect? Nur wie ...
Was willst Du jetzt bitte hören? Konkrete Frage oder selber basteln!
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 22.06.2011, 20:05  
Neuer Benutzer
 
Registriert seit: 22.06.2011
Beiträge: 9
PHP-Kenntnisse:
Anfänger
douse29 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Was willst Du jetzt bitte hören? Konkrete Frage oder selber basteln!
Interessante Frage ... Gegenfrage: hätte ich dann ins Forum geschrieben?

Meine Frage ist doch sehr präzise oder welche Infos kann ich dir noch geben?
douse29 ist offline   Mit Zitat antworten
Alt 22.06.2011, 20:38  
Neuer Benutzer
 
Registriert seit: 22.06.2011
Beiträge: 9
PHP-Kenntnisse:
Anfänger
douse29 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von wolf29 Beitrag anzeigen
Wie wäre es mit GROUP BY und JOIN?

mfg Wolf29
Erster Lösungsansatz (mit GROUP BY + JOIN):

SELECT *
FROM teams t
JOIN spiele s ON (s.team_heim_id = t.id OR s.team_gast_id = t.id)
JOIN eintraege e ON e.eintrags_id = s.eintrags_id
GROUP BY t.id
ORDER BY e.datum

An folgendem scheitere ich:
1. Wie kann ich einem Sieg der t.id zuordnen
2. Wie bringe ich das ganze in einen zeitlichen Bezug? Es sollen ja nur Serien gefunden werden die aufeinanderfolgen (e.datum), sonst wärs ja keine Serie , also wann hat t.id (s.team_heim_id oder s.team_gast_id) X-mal hintereinander gewonnen (s.tore_heim > s.tore_gast OR s.tore_heim < s.tore_gast)

Geändert von douse29 (22.06.2011 um 20:47 Uhr).
douse29 ist offline   Mit Zitat antworten
Alt 22.06.2011, 21:27  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Mit der vorliegenden Datenbankstruktur gar nicht. Das geht nur, wenn Du irgendein Kriterium hast um die Lückenlosigkeit Deiner Datenreihe sicherzustellen, also z.B. lückenlos durchnummerierte Spieltage. Die könntest Du hier zwar ggf. emulieren, das macht die Nummer aber nur fehleranfällig.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 22.06.2011, 22:02  
Neuer Benutzer
 
Registriert seit: 22.06.2011
Beiträge: 9
PHP-Kenntnisse:
Anfänger
douse29 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Jens Clasen Beitrag anzeigen
Mit der vorliegenden Datenbankstruktur gar nicht. Das geht nur, wenn Du irgendein Kriterium hast um die Lückenlosigkeit Deiner Datenreihe sicherzustellen, also z.B. lückenlos durchnummerierte Spieltage. Die könntest Du hier zwar ggf. emulieren, das macht die Nummer aber nur fehleranfällig.

Gruß Jens
Danke für deine Antwort.

Das e.datum ist schon recht zuverlässig, da der Eintrag am Spieltag selber getätigt wird, aber ich habe auch ein Feld e.spieltag wo die Spieltage genau durchnummeriert sind, hast du jetzt einen Lösungsansatz für mich?
douse29 ist offline   Mit Zitat antworten
Alt 22.06.2011, 22:33  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Klar. Join für die betroffene Manschaft jeden Sieg mit allen Niederlagen mit größerer Spieltagnummer. Dann errechne anhand der Spieltagnummer von Sieg und Niederlage die Differenz in Spielen zwischen beiden und nimm pro Spieltag die kleinste Differenz (MIN() + GROUP BY). Damit hast Du dann alle Siegesserien von einem jeden Spieltag aus.

Das komplette SELECT verwendest Du dann als FROM-Clause eines weiteren SELECTs und da ermittelst Du dann einfach die längste Serie. Damit hättest Du z.B. die längste Siegesserie für die aktuelle Manschaft.

Analog kannst Du für alle anderen Serien natürlich auch vorgehen. Du joinst alle Datensätze mit einem gegebenen Status mit den folgenden Datensätzen, die einen anderen Status aufweisen. Das Ergebnis mit der kleinsten Differenz zwischen den beiden Spieltagnummern ist jeweils der Start und Endpunkt einer Serie.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 23.06.2011, 18:29  
Neuer Benutzer
 
Registriert seit: 22.06.2011
Beiträge: 9
PHP-Kenntnisse:
Anfänger
douse29 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Jens Clasen Beitrag anzeigen
Klar. Join für die betroffene Manschaft jeden Sieg mit allen Niederlagen mit größerer Spieltagnummer. Dann errechne anhand der Spieltagnummer von Sieg und Niederlage die Differenz in Spielen zwischen beiden und nimm pro Spieltag die kleinste Differenz (MIN() + GROUP BY). Damit hast Du dann alle Siegesserien von einem jeden Spieltag aus.

Das komplette SELECT verwendest Du dann als FROM-Clause eines weiteren SELECTs und da ermittelst Du dann einfach die längste Serie. Damit hättest Du z.B. die längste Siegesserie für die aktuelle Manschaft.

Analog kannst Du für alle anderen Serien natürlich auch vorgehen. Du joinst alle Datensätze mit einem gegebenen Status mit den folgenden Datensätzen, die einen anderen Status aufweisen. Das Ergebnis mit der kleinsten Differenz zwischen den beiden Spieltagnummern ist jeweils der Start und Endpunkt einer Serie.

Gruß Jens
Danke für deine Antwort.

Aber ich denke das was du beschreibst funktioniert so nicht.

Ich habe z.b. folgendes Ergebnis für einen bestimmen Verein:
Spieltag - Ergebnis
10 - Sieg
9 - Sieg
8 - Sieg
7 - Sieg
6 - Niederlage
5 - Sieg
...

Wie erkenne ich jetzt die Serie? Also hier als Ergebnis 4 Siege in Folge?
douse29 ist offline   Mit Zitat antworten
Alt 23.06.2011, 18:41  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Gruppenbruch revers:

anzahl = 1
X = aktueller Spieltag Ergebnis (Sieg/Niederlage)

Solange davorliegender Spieltag Ergebnis == X
: anzahl ++

letzte Serie : anzahl "X" (z.b. 4 Siege)

Du kannst an jeder Stelle der Liste einsteigen (z.B. um einen all-time-record festzustellen)
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mysql funktioniert nicht (Erweiterung nicht erkannt!?) pfump Server, Hosting und Workstations 10 17.03.2012 11:07
Mysql Server startet nicht mehr Nicolas2006 Datenbanken 2 20.03.2011 16:03
PHP Zugriff auf MySQL Community Server gewähren daemonTutorials Datenbanken 8 21.02.2011 12:28
MySQL Datentransfer (Dateigroesse 4MB) via Shell Zugang oder einfacher promoterlv Datenbanken 1 14.11.2010 22:12
[Erledigt] PHP bekommt keine Verbindung zu MySQL SaKe Datenbanken 15 20.09.2010 14:45
Mysql fehler bei externen Zugriff SteiniKeule Datenbanken 4 18.06.2010 12:54
PDO MySQL abfrage funktioniert nicht Bloodydead PHP Tipps 2010 8 18.06.2010 11:08
angeklickte checkboxen mit mysql auswerten klausmaus PHP Tipps 2010 2 24.05.2010 23:15
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
MySQL Select-result auswerten? Datenbanken 7 21.05.2005 21:06

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql abfrage seit spieltagen nicht gewonnen, mysql auswerten, mysql datenbank auswerten, zugriffe datenbank auswerten mysql

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum